ggplot2玫瑰圖案例——星巴克門店分布圖

使用ggplot2製作放射狀玫瑰圖本不是什麼難事,僅需將普通單序列柱形圖添加添加一個極坐標轉化參數即可。

但是遇到比較小清新的案例,還是值得手動操作一下的。

本文圖片案例來源於DT財經關於星巴克門店分布TOP20城市分布數據圖,用色和呈現形式比較友好,所以就信手拿來作為案例分享給大家。

原圖中並未給出任何實際數據(所以需要用眼睛估測了~—~)

library("rvest")library("dplyr")library("ggplot2")library("grid")library("showtext")library("Cairo")font.add("myfont","msyh.ttc")

找一份網上的最新統計數據

url<-"http://bbs.thmz.com/thread-2715502-1-1.html"table<-read_html(url,encoding="gbk")%>%html_nodes("td.t_f>table")%>%html_table(header =TRUE,trim =TRUE,fill=TRUE)%>%as.data.frame()

城市數據

mydata<-data.frame(label=c("上海","北京","杭州","廣州","深圳","蘇州","成都","天津","南京","武漢","寧波","重慶","西安","無錫","廈門","青島","長沙","南通","常州","福州"))

整理數據

mydata<-merge(mydata,table[,c("城市","門店數量")],by.x="label",by.y="城市",all.x=TRUE)mydata[mydata$label=="常州","門店數量"]=27names(mydata)[2]<-"value"mydata<-arrange(mydata,-value)%>%transform(id=1:20,class=c(1,6,rep(1:6,3)))mydata$label<-as.character(mydata$label)#標籤拆成單字換行,豎排布局:label<-strsplit(mydata$label,"")for (i in 1:length(label)){mydata$label_ff[[i]]<-paste0(label[[i]],collapse="
")}mydata[1:2,"label_ff"]<-c("上海","北京")mydata[16:20,"label_ff"]<-c("青島","廈門","常州","福州","南通")#計算標籤的旋轉角度:mydata$angle=c(rev(9*(1:10-1)+4.5),-(9*(1:10-1)+4.5))mydata$angle[16:20]<-rev(9*(1:5-1)+4.5)

圖形可視化過程:

p<-ggplot(mydata)+geom_col(aes(x=id,y=value,fill=factor(class)))+geom_hline(yintercept =c(25,50,100,200,500),linetype=2,size=.25)+geom_text(aes(x=id,y=value+12,label=label_ff,angle=angle),family="myfont",size=3.5,lineheight=1)+#坐標軸放大一倍佔位:scale_x_continuous(limits=c(0,40),expand=c(0,0))+#Y延伸到負值突出圓心的空白scale_y_continuous(limits=c(-100,600))+scale_fill_manual(values=c("#00643E","#207A57","#3D8C6D","#59A284","#76B69B","#95CBB3"),guide=FALSE)+coord_polar(start=-14.245)+theme_void();p

圖形輸出:

setwd("E:/數據可視化/R/R語言學習筆記/數據可視化/ggplot2/優秀R語言案例")CairoPNG(file="polar_rose.png",width_=2400,height=1800)showtext.begin()grid.newpage()pushViewport(viewport(layout=grid.layout(6,8)))vplayout<-function(x,y){viewport(layout.pos.row =x,layout.pos.col=y)}print(p,vp=vplayout(1:6,1:8))showtext.end()dev.off()

局部線條經過手工修飾!

以上就是整個製圖過程,其中關於角度轉換以及細節處理問題均省略掉了,如需了解可以 單獨交流。

好了乾貨完了,下面是一波廣告:

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語言可視化在商務場景中的應用


推薦閱讀:

用戶分析有哪些經典的模型和方法,如何系統的學慣用戶分析?
當下對於量化投資有用的R語言包有哪些?
ggplot2能做這種圖么?

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