高維分面應用——ggplot2分面氣泡圖餅圖
今天仍然是一篇介紹關於ggplot2高維分面的教程,為什麼要單獨把這一塊內容寫這麼多篇呢,因為很重要,而且很難搞定呀,高維分面是否能夠熟練掌握將決定著你對ggplot2的理解甚至對於整個高維數據可視化的理解是否能夠進階。
其實ggplot2系統內的分面函數只有簡單的一個facet_grid(),但是恰恰就是這麼一個不很起眼,甚至看起來有些特立獨行的分面函數,卻給高維數據可視化帶來了革命性的變化,有了它,所有基於ggplot2的可視化圖形都能夠擴展呈現 維度,從第三維、第四維、第五維(理論上來說)。
還是再強調一下facet_grid()在ggplot2各個幾何圖層中的地位和控制範圍,分面函數作為一個特殊的,具有美學映射屬性,卻被設計在了與幾何圖層近乎獨立地位(表現在從寫法上來看,它並沒有被設計在幾何圖層內,而是與其他幾何圖層在位置上平行),由此可見包作者對其的推崇和重視。
它的控制許可權是很高的,倘若你在facet_grid()函數內部指定了一個分面參數,那麼剩餘的所有幾何圖層都可以自動適用這個分面(當然前提是各幾何圖層的美學映射中都好含有與分面參數相同的變數)。
所以想要分面參數同事控制多個圖層,必須保證每一個圖層內都含有該分面參數同名的變數。
今天以氣泡餅圖為例:
library(ggplot2)library(dplyr)library(rgdal)library(shiny)library(shinythemes)library(scatterpie)
導入並整理地圖數據:
china_map <-readOGR("D:/R/mapdata/State/china.geojson","OGRGeoJSON",stringsAsFactors=FALSE)Encoding(china_map@data$name)<-"UTF-8"china_map <- fortify(china_map) province_city <- read.csv("D:/R/rstudy/Province/chinaprovincecity.csv",stringsAsFactors = FALSE,check.names=FALSE)
構造氣泡餅圖數據:
city_data<-data.frame(Name=rep(c("北京","上海","重慶","武漢","廣州","西安")))for (i in 2:7) city_data[,i]<-round(runif(6,0,250))names(city_data)[2:7]<-paste0("Year",2011:2016)city_data$Full<-apply(city_data[,-1],1,sum)city_data$Full_scale<-scale(city_data$Full,center=F,scale=T)*2#提取中心城市數據:city_data<-city_data%>%merge(province_city[,c("city","wd","jd")],by.x="Name",by.y="city",all.x=TRUE)
氣泡餅圖:
ggplot() + geom_polygon(data=china_map,aes(x=long,y=lat,group=group),fill="white",color="grey")+ geom_scatterpie(data=city_data,aes(x=jd,y=wd,r=Full_scale),cols=names(city_data)[2:7],color="grey", alpha=.8) + scale_fill_brewer(guide=FALSE)+ theme_void()
構造帶有分類變數的氣泡餅圖數據:
city_data2<-data.frame(Name=rep(city_data$Name,6))for (i in 2:4) city_data2[,i]<-runif(nrow(city_data2),10,100)names(city_data2)[2:4]<-paste0("Value",1:3)city_data2$Year<-rep(paste0("Year",2011:2016),each=6)city_data2<-city_data2%>%merge(city_data[,c("Name","jd","wd")],by="Name",all.x=T)city_data2$Full<-apply(city_data2[,2:4],1,sum)%>%scale(center=F,scale=T)city_data2$Full<-as.numeric(city_data2$Full)*2city_data2<-city_data2%>%arrange(Year,Name)
高維分麵餅圖:
ggplot()+geom_polygon(data=china_map,aes(x=long,y=lat,group=group),fill="white",color="grey")+geom_scatterpie(data=city_data2,aes(x=jd,y=wd,r=Full),cols=names(city_data2)[2:4],color="grey", alpha=.8) + scale_fill_brewer(guide=FALSE)+ facet_wrap(~Year)+ theme_void()
好了乾貨完了,下面是一波廣告:
9月12日晚8~10點,本小編有一場關於ggplot2的微課,主要內容如下:
1、ggplot2圖層語法的核心理念
2、ggplot函數與geom_xxx函數間的父子繼承關係3、美學映射參數寫在ggplot函數內與寫在geom_xxx內的差異4、美學映射參數寫在aes函數內部和寫在aes函數外部的差異5、顏色標度一共有幾種類型和寫法,在不同模塊中是否能夠共用6、如何結合實際業務與引用場景進行顏色標度選擇
7、多圖層疊加時,如何解決顏色標度衝突的問題8、分面函數的許可權控制9、主題框架與模塊間的繼承關係10、主題函數更新與替換方案
11、圖形輸出與高清抗鋸齒渲染其實這些問題都是之前我學習過程中走過的彎路,隨著練習的案例越來越多,這些問題一步步全都解決了,其實如果你能有心看完我的所有關於ggplot講解部分,差不多這些問題也都能全部理解。
閱讀原文報名:
報名地址:
天善智能:Hellobi Live | 9月12日 R語言可視化在商務場景中的應用
推薦閱讀:
※谷歌地圖與ggplot2系統如何無縫對接
※《R語言實戰》第五部分第十九章-使用ggplot2進行高級繪圖學習筆記
※R語言數據清洗實戰——世界瀕危遺產地數據爬取案例
※多層數據巧鑽取,業務盲點無處可躲~
※珍藏,最全面+最完善的Excel條件格式使用手冊