接上一篇,R地圖系列(1):maptools包繪制中國(guó)地圖,如果沒(méi)有讀過(guò)第一篇的讀者建議回去瀏覽一遍。
由上一篇文章得知,我們的數(shù)據(jù)已經(jīng)保存在map中了。那么,如何將將包含經(jīng)緯度的數(shù)據(jù)投影到地圖上去呢?
數(shù)據(jù)準(zhǔn)備
畫(huà)圖之前需要準(zhǔn)備的數(shù)據(jù)包括(隨便舉個(gè)例子):
城市名,經(jīng)度,緯度,人口數(shù)(自行車數(shù)等等),隨便編一些數(shù)據(jù),大家可以看看數(shù)據(jù)格式。
name latitude longitude num
杭州 30.27415 120.15515 100
上海 31.23037 121.4737 70
成都 30.5702 104.06476 60
OK,按照以上格式準(zhǔn)備好后我們就可以繪圖了。
我這邊用的的數(shù)據(jù)涉及隱私,不便公布,只是最后用來(lái)展現(xiàn)一下效果。
將數(shù)據(jù)存在city 中,待會(huì)繪圖會(huì)用到。
city=read_excel("citydata.xlsx",col_names = TRUE)
氣泡圖形式
執(zhí)行以下代碼:
mymap = ggplot(data = fortify(map)) +
geom_polygon(aes(x = long, y = lat, group=group), colour = "gray",fill = "white") +
labs(title="中國(guó)地圖",x="",y="") +
geom_point(data=city,aes(x=longitude,y=latitude,size=num),colour="red",pch=1) +
geom_text(aes(x=longitude,y=latitude,label=name), data=city,color="black",size=1.5) +
theme(text=element_text(family="STKaiti",size=14))
可以得到:
氣泡圖形式的各個(gè)城市對(duì)應(yīng)的數(shù)據(jù)就出來(lái)了,當(dāng)然也可以在每個(gè)氣泡標(biāo)出城市名稱。
文字圖形式
執(zhí)行以下代碼:
mymap1 = ggplot(data = fortify(map)) +
geom_polygon(aes(x = long, y = lat, group=group), colour = "lightblue",fill = "white") +
labs(title="中國(guó)地圖",x="",y="") +
geom_text(aes(x=longitude,y=latitude,label=name,size=num,colour=factor(res_num)), data=city) +
scale_color_manual("name",values = mycolors)
文字圖形式的各個(gè)城市對(duì)應(yīng)的數(shù)據(jù)就出來(lái)了,數(shù)據(jù)中我用了雙重映射,其中文字的大小影射到個(gè)城市某個(gè)數(shù)據(jù)的大小,顏色的深淺也映射到數(shù)據(jù)的大小。
備注:顏色部分建議先讀RColorBrewer與ggplot2
這樣,我們以后就可以將任意維度的各個(gè)城市的數(shù)據(jù)(比如降雨量、人口、pm2.5等等)通過(guò)不同的方式(比如氣泡圖、問(wèn)文字圖、柱狀圖等ggplot2可以實(shí)現(xiàn)的圖)投影到中國(guó)地圖上了。