炼数成金 门户 商业智能 R语言 查看内容

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

2017-9-12 16:21| 发布者: 炼数成金_小数| 查看: 22065| 评论: 4|原作者: 杜雨|来自: R语言中文社区
摘要: 使用ggplot2制作放射状玫瑰图本不是什么难事,仅需将普通单序列柱形图添加添加一个极坐标转化参数即可。但是遇到比较小清新的案例,还是值得手动操作一下的。本文图片案例来源于DT财经关于星巴克门店分布TOP20城市分 ...
tm 案例 ggplot2 plyr
使用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="utf-8")%>%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()

局部线条经过手工修饰!

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754
1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

相关阅读

发表评论

最新评论

引用 千里伤歌 2017-9-18 11:21
之前看到这个图还想着如何用R画出来,自己一直比较喜欢炫酷的图表,也对作图挺感兴趣,很棒!
引用 xiaojiaoqi520 2017-9-17 09:46
哦,我知道了,是没有加载成功包
引用 xiaojiaoqi520 2017-9-17 09:40
could not find function "font.add"  没有这个函数怎么办
引用 xiaojiaoqi520 2017-9-17 09:40
查看全部评论(4)

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

  GMT+8, 2017-10-19 18:50 , Processed in 0.151345 second(s), 26 queries .