R可视乎|瀑布图

简介: 瀑布图(waterfall plot) 用于展示拥有相同的X轴变量数据(如相同的时间序列)、不同的Y轴离散型变量(如不同的类别变量)和Z轴数值变量,可以清晰地展示不同变量之间的数据变化关系。

1.简介


瀑布图(waterfall plot) 用于展示拥有相同的X轴变量数据(如相同的时间序列)、不同的Y轴离散型变量(如不同的类别变量)和Z轴数值变量,可以清晰地展示不同变量之间的数据变化关系。


2.三维瀑布图


三维瀑布图可以看成是多数据系列三维面积图。R中plot3D包的polygon3D()函数和segments3D()函数可以绘制三维面积图,lines3D()函数可以绘制三维曲线图,所以,综合这几个函数可以绘制三维瀑布图,该代码,数据来源R语言书可视化之美[1]

这是一本非常棒的R可视化书籍。小编预计在年底进行一次抽奖送该书的活动,尽情期待😄。


数据介绍

原始数据如下所示:一共39行,9列数据。列表示不同组别,行表示不同x坐标下的数值大小,其中第一列表示x坐标位置。

library(plot3D)
library(RColorBrewer)
mydata0 <- read.csv("Facting_Data.csv",check.names =FALSE)
head(mydata0)

image.gif

之后对数据进行一个变换,变成我们绘图所需要的数据格式(这里最费时间了)。因为从行来看,数据是离散的绘制出来效果不是很好,于是使用插值样条函数(spline)对原始数据进行插值,变成了300行数据(n=300)。这里做了一个for循环,把所有数据都进行了插值,列名存在了variable中。mydata的前6行结果如下所示:

N <- ncol(mydata0)-1
mydata <- data.frame(x=numeric(),y=numeric(),variable=character())
for(i in 1:N){
  newdata <- data.frame(spline(mydata0[,1],mydata0[,i+1],n=300,method= "natural")) #进行插值
  newdata$variable<-colnames(mydata0)[i+1]
  mydata <- rbind(mydata,newdata)
}
mydata$variable <- as.numeric(mydata$variable)
group <- unique(mydata$variable) #每组的名称
M <- length(group) #组数
head(mydata)

image.gif

进行颜色的处理,以及图片版式的设置。

gg_color_hue <- function(n) {
  hues = seq(15, 375, length = n + 1)
  hcl(h = hues, l = 65, c = 100)[1:n]
}
colormap <- rev(gg_color_hue(M))#brewer.pal(M,'RdYlGn')
pmar <- par(mar = c(5.1, 4.1, 4.1, 6.1))


基础版本

这里先构建一个空的立方体,注意x,y,z轴的坐标范围,所以你得看看原始数据,再定范围,不能一股脑地拿来用。该函数的内部参数,在R可视乎|等高线有提过一些。或者将光标放在该函数,按F1寻求帮助文档,在这里就不做过多解释,Rstudio常用快捷键小编已经整理完,可学习使用。

perspbox(z=as.vector(0),#add=TRUE,
          xlim=c(20,70),ylim=c(360,750),zlim=c(0,15),
          ticktype = "detailed",bty = "f",box = TRUE,
          colkey = FALSE,theta = -110, phi = 20, d=3)

}WY4@(RZKBKE914F)7O~KY4.png

使用polygon3D函数和lines3D函数将每一类的数据填充到立方体中。这里代码主要还是用base包写的,你可以试试tidyverse流写。

for (i in 1:M){
  df0<-mydata[mydata$variable==group[i],]
  Ndf<-nrow(df0)
  df<-rbind(df0,c(df0$x[1],df0$y[Ndf],df0$variable[Ndf]))
  with(df,polygon3D(x=variable,y=x, z=y, alpha=0.6,
                     col=colormap[i],lwd = 3,add=TRUE,colkey = FALSE))
  with(df0,lines3D(x=variable,y=x, z=y, 
                  lwd = 0.5,col="black",add=TRUE))
}

[)D@LU$(LIEM4`940RT1@7C.png

在此,就完成这个三维瀑布图了,美观度极佳,可解释性也不错。


添加第四个变量

如果想加入第四变量也是没问题的,具体不再重复。完整代码可见R语言书可视化之美或者我的github中。

8J]CG9XPRU7A%3RSXGIBZCY.png



行分面的带填充的曲线图

使用分面图的可视化方法也可以展示瀑布图的数据信息,关于分面图可视化方法我已经在R可视乎|分面一页多图介绍过。

下面进行行分面的带填充的曲线图绘制,所有数据共用X轴坐标,每个数据类别是用的Y轴坐标。

相对三维瀑布图,分面瀑布图的优点是:可以更好地展示数据信息,避免不同类别之间数据重叠引起的遮挡问题,但是不能很直接地比较不同类别之间的数据差异。


基础版本

这里不做过多解释,用geom_area()绘制面积,用facet_grid()进行分面,最后就是对主题进行设置。主题的设置有很多有趣的技巧,以后整理一篇完整的。

library(reshape2)
library(ggplot2)
mydata0<-read.csv("Facting_Data.csv",stringsAsFactors=FALSE)
colnames(mydata0)<-c("X_Axis",seq(60,25,-5))
mydata<-melt(mydata0,id.vars = "X_Axis")
ggplot(mydata,aes(X_Axis,value,fill=variable))+
  geom_area(color="black",size=0.25)+
  facet_grid(variable~.)+
  theme(
    text=element_text(size=15,face="plain",color="black"),
    axis.title=element_text(size=10,face="plain",color="black"),
    axis.text = element_text(size=10,face="plain",color="black"),
    legend.position="none"
  )

BF4](QCN8_5G8PYJZ8FCP$G.png


加入第四个变量

同理,在上图的基础上可以将每个数据的Z变量进行颜色映射,这样有利于比较不同类别之间的数据差异,该图如下所示:

03}7CY%RH6]}Y642U(GQI`9.png

当然峰峦图也可以很好地展示瀑布图的数据信息,具体将在下一次可视化推送中进行介绍。

以上对绘制瀑布图(这里指的和网上说的瀑布图还不一样)进行了详细介绍了。本篇视为《R语言数据可视化之美》学习笔记,并进行函数详细介绍与解释,版权归原作者所有。其他可视化图可在菜单命令[可视化]中搜索得到。

目录
相关文章
|
人工智能 算法
图的应用——关键路径
图的应用——关键路径
395 0
图的应用——关键路径
|
2月前
画好一张架构图/业务图/流程图问题之如何让图结构更清晰问题如何解决
画好一张架构图/业务图/流程图问题之如何让图结构更清晰问题如何解决
|
4月前
|
开发者
如何画好一张架构图/业务图/流程图,掌握4个关键点
本文分享了如何制作出有帮助的图表,强调了即使是开发者也需要良好的绘图技巧。文章列举了常见的图表类型,如代码实现图、技术架构图、业务流程图、技术链路图、交互时序图和业务架构图,并指出好的图表应具备结构清晰、外表美观和内容完整的特点。为了达到这些标准,作者推荐了设计的四大原则:亲密性、对齐、对比和重复,以及色轮的运用来提升美感。此外,还介绍了黄金分割构图法以增加视觉吸引力。最后,强调了以终为始的设计思路,确保图表能独立传达完整的信息,并鼓励读者实践这些技巧,提升工作和生活中的沟通效率。
如何画好一张架构图/业务图/流程图,掌握4个关键点
|
9月前
|
数据处理 定位技术 开发者
甘特图、IPO图、DFD图
甘特图、IPO图、DFD图
|
11月前
|
人工智能 数据挖掘
这图怎么画 | 相关分析棒棒糖图
这图怎么画 | 相关分析棒棒糖图
104 0
|
4月前
|
开发者
如何画好一张架构图/业务图/流程图,掌握这4个关键点
作为一个开发,日常工作中免不了要画一些图,无论是技术架构图还是业务流程图。基于个人的一些经验,作者分享了他的作图方法,给大家一点思路提供参考,希望在未来的工作、生活中都能有所帮助。
|
存储 数据可视化 atlas
maftools | 从头开始绘制发表级oncoplot(瀑布图)
maftools | 从头开始绘制发表级oncoplot(瀑布图)
352 0
|
数据可视化
R 可视乎|优雅的绘制流程图
R 可视乎|优雅的绘制流程图
61 0
|
人工智能 算法