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=="常州","门店数量"]=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()

局部线条经过手工修饰!

以上就是整个制图过程,其中关于角度转换以及细节处理问题均省略掉了,如需了解可以 单独交流。

原文发布于微信公众号 - 数据小魔方(datamofang)

原文发表时间:2017-09-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏天天P图攻城狮

GPUImage源码解读(四) - 图像锐化

边缘模糊是图像中经常出现的质量问题,由此造成的轮廓不清晰,线条不鲜明,使图像特征提取、识别和理解难以进行。

7243
来自专栏IT派

Python数据分析与挖掘学习路线图

语言的学习,真正掌握语言的方式,是交流与实践,所以,这三本书,是由浅入深的步骤。大家在学习过程中,可以到群里面去进行交流沟通。

1342
来自专栏大数据文摘

用递归神经网络,撰写一份特朗普式发言稿!

特朗普充满个人特色的语言风格让作者产生了兴趣,如果把他的推文和演讲稿都用于训练数据,再运用递归神经网络能否生成一份有特式风格的发言稿呢?结论是,如果数据和算力足...

962
来自专栏LhWorld哥陪你聊算法

【自然语言处理篇】--以NLTK为基础讲解自然语⾔处理的原理和基础知识

Python上著名的⾃然语⾔处理库⾃带语料库,词性分类库⾃带分类,分词,等等功能强⼤的社区⽀持,还有N多的简单版wrapper。

1892
来自专栏理论坞

微光小插画—一篇不怎么专业的所谓教程

说说为什么选择大象和骆驼吧,选择大象是因为是前几天看了一篇呼吁大家不要骑大象的视频,觉得琦大象很残忍,并且这段时间又在读《未来简史》人类史,从另一些角度颠覆了一...

993
来自专栏LET

数据可视化之热力图

1.2K7
来自专栏机器人网

一图向菜鸟解释机器学习、数据挖掘

随着数据科学在人工智能发展中大放异彩,数据挖掘、机器学习进入了越来越多人的视野。而对于很多人来说,诸如机器学习之类的名次听起来是神乎其技,但其真正的内涵却不为一...

2927
来自专栏Code_iOS

OpenGL ES 2.0 (iOS) 笔记大纲

这里包含了所有,我已经学习或者将要学习的 OpenGL ES 2 内容,所以它是笔记,描述的是学习心得,不是一本教科书。

1232
来自专栏AI2ML人工智能to机器学习

易图秒懂の连接主义诞生

我们在“易图秒懂の神经网络潜行-CNN前生" 和 “易图秒懂の神经网络潜行-RNN前生" 里面,简述了神经网络潜行的发展。”易图秒懂の符号主义诞生“里我们提到符...

1255
来自专栏云时之间

有趣的数学(一)

前言:前几天一个阿姨告诉我她一碰见数学就头疼,是一个不折不扣的数学白痴,我说你学到的是学校的数学,那不是真正的数学,当时我立了flag,要让你喜欢上有趣的数学,...

3558

扫码关注云+社区

领取腾讯云代金券