分享

ggplot2玫瑰图案例——星巴克门店分布图

 iceer1212 2017-09-16

今晚
8点整

杜雨老师在线课程:

R语言可视化在商务场景中的应用

(扫描文末二维码免费加入课程


杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang) ,“数据小魔方”创始人。

使用ggplot2制作放射状玫瑰图本不是什么难事,仅需将普通单序列柱形图添加添加一个极坐标转化参数即可。

但是遇到比较小清新的案例,还是值得手动操作一下的。

本文图片案例来源于DT财经关于星巴克门店分布TOP20城市分布数据图,用色和呈现形式比较友好,所以就信手拿来作为案例分享给大家。


原图中并未给出任何实际数据(所以需要用眼睛估测了~—~)

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

找一份网上的最新统计数据

url<-'http://bbs./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=='常州','门店数量']=27
names(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='\n') } 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讲解部分,差不多这些问题也都能全部理解。

扫描下方二维码,免费加入课程

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多