對,你沒看錯,真的有這種操作~

之前的ggplot2入門實踐篇已經更新告一段落,也已經做了歸總分類分享給大家。

最近翻看突然發現少了一個知識點,就是分面中沒有講填充多邊形分面的應用,雖然其理念跟其他的常用圖表類型一致。

但是鑒於多邊形填充本身就比較複雜,再加上分面肯定能把大部分小夥伴兒繞暈,這裡還是親自實踐一篇案例詳細講解一下實際用法。

如果你還不懂如何使用ggplot2製作數據地圖的話,你可以參考以下序列文件:

地圖部分(ggplot2)

你想要的地圖素材資源,我都幫你整理好了~

一篇文章教你搞定JSON素材,從此告別SHP時代~

大道至簡——論如何最優雅的操縱json地圖數據

關於美國地圖中的兩個海外州坐標平移與原始投影問題~

R語言可視化——關於ggplot所支持的數據地圖素材類型

一篇小短文助你打開數據可視化的任督二脈!

數據地圖多圖層對象的顏色標度重疊問題解決方案

ggplot2中如何自定義數據地圖版面範圍~

關於數據地圖的幾個遺留問題解決方案

R語言數據地圖——美國地圖

R語言數據地圖——全球填色地圖

數據地圖系列7|R語言版(上)

數據地圖系列8|R語言版數據地圖(下)

R語言可視化——數據地圖應用(東三省)

R語言可視化——數據地圖離散百分比填充(環渤海)

R語言可視化——地圖填充與散點圖圖層疊加

R語言可視化——多圖層疊加(離散顏色填充與氣泡圖綜合運用)

R語言可視化——地圖與氣泡圖結合應用

用R語言復盤美國總統大選結果~

R語言可視化——ggplot繪製中心密度輻射圖

R語言可視化——中心放射狀路徑圖

你絕對想不到,數據地圖還能這麼玩~

玩轉數據地圖系列之——地圖上的迷你條形圖

一個小案例,教你如何從數據抓取、數據清洗到數據可視化

一篇全是代碼的數據可視化案例

小魔方不想跟你說話,並向你扔了一堆代碼~~~

地圖可視化之——移花接木

為了演示方便,今天這篇使用純模擬數據:

載入包:nlibrary("ggplot2")nlibrary("plyr")nlibrary("ggthemes")nlibrary("rgdal")nlibrary("dplyr")n

導入中國省界地圖:

setwd("D:/R/rstudy/CHN_adm") nchina_map<-readOGR("bou2_4p.shp",stringsAsFactors=FALSE)nmydata<-china_map@data["NAME"]nmydata$id<-0:924;mydata[mydata$id==898,"NAME"]<-"澳門特別行政區"n

mymapdata<-fortify(china_map)nmymapdata$id<-as.numeric(mymapdata$id)nmymapdata<-merge(mymapdata,mydata,all.x=TRUE)nmymapdata<- mymapdata %>%rename(region=NAME)n

今天的目標是,使用一個省份12年份實踐序列數據分別呈現填色散點氣泡圖、顏色填充圖、以及組合圖,形成3*4排列的數據地圖分面,不是使用grid逐個列印單個地圖,而是直接使用ggplot2的分面參數進行繪製。

考慮到如果使用傳統的數據源格式(geom_polygeon製作填充圖要求將指標數據與地理分界點數據合併,因為地理分界點數據有9萬個,12個年份數據表寬轉長之後會暴增到120萬+,肯定會拖慢內存,所以今天使用geom_map函數進行顏色填充地圖的繪製)。

以下是本案例步驟:

首先構造12個年份變數:nmydata_new<-data.frame(NAME=unique(mydata$NAME))nfor (i in 2:13){nmydata_new[,i]<-round(runif(34,0,250))n}n

定義並切割連續型數據為因子變數nnames(mydata_new)[2:length(mydata_new)]<-as.character(2001:2012)nmydata_new<-mydata_new%>%tidyr::gather(year,zhibiao,-1)nmydata_new$fact<-cut(mydata_new$zhibiao,breaks=c(0,50,100,150,200,250),labels=c(0~50,50~100,100~150,150~200,200~250),order=TRUE,include.lowest = TRUE)n

以下是構圖過程:

分面地圖一(熱力填色地圖): nggplot(mydata_new,aes(map_id=NAME,fill=fact))+ngeom_map(map=mymapdata,colour="grey65")+nscale_fill_brewer(palette="Blues") + ###Blues&Greensnfacet_wrap(~year)+nexpand_limits(x=mymapdata$long,y=mymapdata$lat)+ncoord_map("polyconic")+nguides(fill=guide_legend(reverse=TRUE,title=NULL))+ ntheme_void()%+replace% theme(legend.position = c(0,0.7),legend.text.align=1) n

導入併合並省份行政中心經緯度數據nprovince_city <- read.csv("D:/R/rstudy/Province/chinaprovincecity.csv") nprovince_city<-province_city%>%select(province,jd,wd)nmydata_new<-merge(mydata_new,province_city,by.x="NAME",by.y="province",all.x=TRUE)n

分面地圖二(填色氣泡地圖):nggplot(mydata_new,aes(map_id=NAME))+ngeom_map(map=mymapdata,colour="grey65",fill="#EEF3FA")+ngeom_point(aes(x=jd,y=wd,size=zhibiao,colour=zhibiao),shape=16)+nscale_size_area(max_size=6) + nscale_colour_gradient(low="white",high="#D73434")+ nfacet_wrap(~year)+nexpand_limits(x=mymapdata$long,y=mymapdata$lat)+ncoord_map("polyconic")+nguides(fill=guide_legend(reverse=TRUE,title=NULL),size=guide_legend(reverse=TRUE,title=NULL))+ ntheme_void()%+replace% theme(legend.position = c(0,0.7),legend.text.align=1) n

分面地圖三(填色氣泡+熱力填充地圖): nggplot(mydata_new,aes(map_id=NAME))+ngeom_map(map=mymapdata,aes(fill=fact),colour="white")+ngeom_point(aes(x=jd,y=wd,size=zhibiao,colour=zhibiao),shape=16)+nscale_size_area(max_size=4) + nscale_fill_brewer(palette="Greens") + ###Blues&Greensnscale_colour_gradient(low="white",high="#D73434")+ nfacet_wrap(~year)+nexpand_limits(x=mymapdata$long,y=mymapdata$lat)+ncoord_map("polyconic")+nguides(fill=guide_legend(reverse=TRUE,title=NULL),size=guide_legend(reverse=TRUE,title=NULL))+ ntheme_void()%+replace% theme(legend.position = c(0,0.7),legend.text.align=1) n

對你沒有看錯,ggplot2就是這麼高端大氣上檔次,想不想學這種操作呀,9月12日晚八點,天善學院我們不見不散(悄悄地告訴你報名地址在閱讀原文里)~_~

所需數據源請移步之本人GitHub下載,可以直接進入GitHub官網搜索ljtyduyu,也可以在後台回復任意內容,獲取小魔方的GitHub主頁數據獲取地址。

聯繫方式:

微信:ljty1991

博客主頁:raindu's home

個人公眾號:數據小魔方(datamofang)

團隊公眾號:EasyCharts

qq交流群:[魔方學院]298236508


推薦閱讀:

用R-Shiny打造一個美美的在線App
Tidy data----從零開始學會大數據分析課程第4課-課後作業1-part2
MySQL |OR運算符

TAG:R编程语言 | 数据可视化 | 数据分析 |