繪製地圖&熱力圖-R語言

前言說明

對於地域信息的描述,採用地圖的形式展現會比語言描述或者一般的條形圖、餅圖更直觀,近期需要展現不同地區數據差別,可以借鑑一些網站例如地圖惠等導入數據製作,但很多都有一定限制,例如註冊收費等,故利用R進行了繪製。參考openthings的博客成功製作出了漂亮的地圖,他的博客寫的很詳細,很贊。
首先下載地圖文件及其他用到的數據,解壓保存到自己指定的文件夾中,繪圖所用到的數據均在該文件中。

R代碼實現

##加載相關包
library(mapdata)
library(maptools)
library(ggplot2)
library(plyr)

讀取地圖文件,並繪製出圖形

china_map=readShapePoly("E://study_data//chinaprovinceborderdata_tar_gz//bou2_4p.shp")
plot(china_map)

效果如圖,由於投影結果過於扁平,故需要調整。
這裏寫圖片描述

ggplot(china_map,aes(x=long,y=lat,group=group))+
geom_polygon(fill="white",colour="black")+
coord_map("polyconic")+
theme(
    panel.grid=element_blank(),
    panel.background=element_blank(),
    axis.text=element_blank(),
    axis.ticks=element_blank(),
    axis.title=element_blank(),
    legend.position=c(0.2,0.3)
  )

調整投影方式後,圖像如下,可以不要theme部分,自己查看效果,會有經緯線等信息。
這裏寫圖片描述

x<-china_map@data
xs<-data.frame(x,id=seq(0:924)-1)#地圖中共計有925個地域信息
china_map1<-fortify(china_map)
china_map_data<-join(china_map1,xs,type="full")#基於id進行連接
#unique(china_map@data$NAME)#查看地圖數據中保存的地域名稱,編輯自己的數據與其一致
mydata<-read.csv("E://study_data//data_dt.csv",header=T,as.is=T)
china_data <- join(china_map_data, mydata, type="full")#基於NAME字段進行連接,NAME字段來自於地圖文件中

上述代碼將地圖數據與自己的數據進行連接,合併在一起,進一步繪製符合自己要求的熱力圖。

ggplot(china_data,aes(x=long,y=lat,group=group,fill=ratio))+
  geom_polygon(colour="grey40")+
  scale_fill_gradient(low="white",high="red")+
  coord_map("polyconic")+
  theme(
    panel.grid=element_blank(),
    panel.background=element_blank(),
    axis.text=element_blank(),
    axis.ticks=element_blank(),
    axis.title=element_blank(),
    legend.position=c(0.2,0.3)
  )##參數“ratio”爲我們要展現的數據指標,基於該指標繪製熱力圖

圖形結果如下,是不是有那麼一丟丟好看,顏色可自己調整,這裏我選用的紅色。
這裏寫圖片描述

下面加上地區標籤。

province_city<-read.csv("E://study_data//pcity.csv",header=T,as.is=T)#獲取省會城市座標
ggplot(china_data,aes(long,lat))+
  geom_polygon(aes(group=group,fill=ratio),colour="grey",size=0.01)+
  scale_fill_gradient(low="white",high="red")+
  coord_map("polyconic")+
  geom_text(aes(x=jd,y=wd,label=name),data=province_city,colour="black",size=2.5)+
  theme(
    panel.grid=element_blank(),
    panel.background=element_blank(),
    axis.text=element_blank(),
    axis.ticks=element_blank(),
    axis.title=element_blank()
  )

邊緣色爲黑色個人覺得不好看很醜,調整爲grey,最終成果圖如下。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章