前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言数据可视化——仿网易数独圆环条形图

R语言数据可视化——仿网易数独圆环条形图

作者头像
数据小磨坊
发布2018-04-11 16:42:33
1.1K0
发布2018-04-11 16:42:33
举报
文章被收录于专栏:数据小魔方数据小魔方

一个案例,告诉你如何灵活的运用ggplot2来制作花样繁多的信息图!

虽然ggplot2的内置图层只有屈指可数的几十个,可是图表组合之后的可能性是无限的。

实际上还是万变不离其宗,就如同使用Excel模仿复杂图表一样,再复杂的图表也是有不同的元素和模块组合起来的,只要能够用心去拆解,都可以找到行之有效的方法。如同庖丁解牛,只要洞悉骨架和经脉,才能随心所欲的下刀。

setwd("F:/数据可视化/R/R语言学习笔记/可视化/ggplot2/商务图表")

library("ggplot2") library("tidyr") library("dplyr") library("grid") library("showtext") library('"Cairo") library("scales")

font.add("myfont","msyhl.ttc") mydata<-read.csv("mydata.csv",stringsAsFactors=FALSE,check.names=FALSE) mydata$index<-1:nrow(mydata) mydata$angle1<-1.5*seq(-1,-59) mydata$angle2<-1.5*seq(59,1) label<-strsplit(mydata$Country,"")

for (i in 1:length(label)){ label[[i]]<-paste0(label[[i]],collapse="\n") }

mydata$label<-unlist(label) mydata$label[37:59]<-gsub("\n","",mydata$label[37:59]) mynewdata<-mydata%>%gather(Class,Value,2:4)

图形一:

mynewdata$Class<-factor(mynewdata$Class,levels=c("环保优先","其他/未回答","经济优先"),order=T) p1<-ggplot(data=mynewdata,aes(x=index,y=Value,fill=Class))+ geom_bar(stat="identity",width=0.95)+ geom_text(aes(y=105,label=ifelse(index<=36,label,""),angle=angle1),hjust=.5,vjust=0,family="myfont")+ geom_text(aes(y=105,label=ifelse(index>36,label,""),angle=angle2),hjust=0,vjust=0.5,family="myfont")+ geom_text(aes(y=Value,label=Value,angle=angle2),position=position_stack(vjust=.9),family="myfont")+ xlim(0.5,236.5)+ylim(-120,105)+ coord_polar(theta="x")+ guides(fill=guide_legend(title=NULL))+ scale_fill_manual(values=c("#2EA7E0","#B5B5B6","#CBE510"))+ theme( text=element_text(size=20), line=element_blank(), rect=element_blank(), axis.text=element_blank(), axis.title=element_blank(), legend.position=c(.95,.75), legend.key.size =unit(.8,'cm'), )

以上可以制作出原始案例的外围圆环图:

mydata2<-data.frame(year=c("1998年","2004年","2009年","2014年"),经济优先=c(.24,.27,.23,.28),未回答=c(.25,.21,.23,.15),环保优先=c(.51,.52,.54,.57),smallyear=rep(.15,4),check.names = FALSE) names(mydata2)[3]<-"其他/未回答" mydata2$index<-1:nrow(mydata2)

mynewdata2<-mydata2%>%gather(Class,Value,2:5) mynewdata2$Class<-factor(mynewdata2$Class,levels=c("smallyear","环保优先","其他/未回答","经济优先"),order=T)

p2<-ggplot(data=mynewdata2,aes(x=index,y=Value,fill=Class))+ geom_bar(stat="identity",width=0.99)+ geom_text(aes(y=Value,label=ifelse(mynewdata2$Class=="smallyear",levels(mynewdata2$year),""),angle=c(rep(0,12),11.25*seq(-1,-7,-2))),position=position_stack(vjust=.5),family="myfont",size=7.5)+ geom_text(aes(y=Value,label=ifelse(mynewdata2$Class!="smallyear",percent(mynewdata2$Value),"")),position=position_stack(vjust=.5),family="myfont",size=6)+ xlim(0.5,16.5)+ylim(-.5,1.25)+ coord_polar(theta="x")+ guides(fill=FALSE)+ scale_fill_manual(values=c("#EFEFEF","#2EA7E0","#B5B5B6","#CBE510"))+ theme( line=element_blank(), rect=element_blank(), axis.text=element_blank(), axis.title=element_blank(), legend.position="none" )

以上可以做出内侧小圆环图:

CairoPNG(file="circletile1.png",width=2000,height=2000) showtext.begin() vie<-viewport(width=0.5,height=0.5,x=0.5,y=0.5) p1;print(p2,vp=vie) grid.text(label="六成中国人认为\n环境比经济更重要",,x=.99,y=.90,gp=gpar(col="black",fontsize=60,draw=TRUE,just="right") showtext.end() dev.off()

合并一步,一幅完整的图表便出炉了!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据小魔方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档