前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >超强脑洞第三弹之——ggplot构造瀑布图

超强脑洞第三弹之——ggplot构造瀑布图

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

对,就是瀑布图,你没看错。而且是使用ggplot现有图层叠加构造,并没有用任何ggplot的外挂插件。

作图理念是在数据源的构造上,方法与《Excel图表之道》《Excel图表拒绝平庸》中的方法一致,我只是加入了自己的技巧。

library("reshape2") library("ggplot2") library("ggmap") library("Cairo")

构造瀑布图数据源:

Item<-c("Before","Factor A","Factor B","Factor C","Factor D","Factor E","Factor F","Factor G","After") Data<-c(325,-32,-105,38,86,97,232,389,1030) mydata<-data.frame(Item,Data,stringsAsFactors =F) mydata$BA<-mydata$Data mydata$Dummy<-0 mydata$add<-0 mydata$Reduc<-0 mydata$BA[2:8]<-0

for (i in 2:8){ ifelse(mydata$Data[i]<0,mydata$Dummy[i]<-sum(mydata$Data[1:i]),mydata$Dummy[i]<-sum(mydata$Data[1:i-1])) } for (i in 2:8){ ifelse(mydata$Data[i]<0,mydata$add[i]<-0,mydata$add[i]<-mydata$Data[i]) } for (i in 2:8){ ifelse(mydata$Data[i]<0,mydata$Reduc[i]<-abs(mydata$Data[i]),mydata$add[i]<-0) }

mydata1<-mydata[,-2] mydataA<- melt(mydata1,id.vars ="Item",variable.name = "class", value.name = "scope")

mydataA$class<-factor(mydataA$class,levels=c("Reduc","add","Dummy","BA"),order=T)

色盘设置:

Color<-c("#A6442A","#015313","#FFFFFF","#131F37")

作图函数:

CairoPNG(file="C:/Users/Administrator/Desktop/瀑布图1.png",width=650,height=360) ggplot()+ geom_bar(data=mydataA,aes(x=Item,y=scope,fill=class),stat="identity",position="stack",width=1)+ scale_x_discrete(limits=Item)+ scale_fill_manual(values=Color)+ guides(fill=FALSE)+ geom_text(data=mydata1,aes(x=Item,y=BA/2),label=ifelse(mydata1$BA!=0,mydata1$BA,""),col="white")+ geom_text(data=mydata1,aes(x=Item,y=Dummy+add),label=ifelse(mydata1$add!=0,paste("+",mydata1$add,sep=""),""),col="#015313",vjust=-.5)+ geom_text(data=mydata1,aes(x=Item,y=Dummy),label=ifelse(mydata1$Reduc!=0,paste("-",mydata1$Reduc,sep=""),""),col="#A6442A",vjust=1.2)+ theme( panel.background=element_blank(), axis.title=element_blank(), axis.text = element_text(colour ="black",size=12,face="italic"), axis.text.y=element_blank(), axis.ticks=element_blank() ) dev.off()

通过角度旋转,得到水平方向瀑布图:

CairoPNG(file="C:/Users/Administrator/Desktop/瀑布图2.png",width=650,height=360) ggplot()+ geom_bar(data=mydataA,aes(x=Item,y=scope,fill=class),stat="identity",position="stack",width=1)+ scale_x_discrete(limits=Item)+ scale_fill_manual(values=Color)+ coord_flip()+ guides(fill=FALSE)+ geom_text(data=mydata1,aes(x=Item,y=BA/2),label=ifelse(mydata1$BA!=0,mydata1$BA,""),col="white")+ geom_text(data=mydata1,aes(x=Item,y=Dummy+add),label=ifelse(mydata1$add!=0,paste("+",mydata1$add,sep=""),""),col="#015313",hjust=-.20)+ geom_text(data=mydata1,aes(x=Item,y=Dummy),label=ifelse(mydata1$Reduc!=0,paste("-",mydata1$Reduc,sep=""),""),col="#A6442A",hjust=1.2)+ theme( panel.background=element_blank(), axis.title=element_blank(), axis.text = element_text(colour ="black",size=12,face="italic"), axis.text.x=element_blank(), axis.ticks=element_blank() ) dev.off()

核心要点总结:

  • 数据源组织:瀑布图高度依赖数据源组织,如果你不太熟悉R中的数据操纵,完全可以将数据源组织过程在excel使用函数完成,然后倒入R并转为长数据进行作图。
  • 数据宽转长过程:转换后的因子变量的四个水平顺序要重点注意。因子水平顺序为:降低值<增加值<占位值<开头/结尾值。(顺序万不能乱)。
  • 色盘颜色顺序:与因子水平顺序一致。第三个为白色,其他与之对应。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档