R可视乎|瀑布图

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)

之后对数据进行一个变换,变成我们绘图所需要的数据格式(这里最费时间了)。因为从行来看,数据是离散的绘制出来效果不是很好,于是使用插值样条函数(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)

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

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)

使用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))
}

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

添加第四个变量

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

行分面的带填充的曲线图

使用分面图的可视化方法也可以展示瀑布图的数据信息,关于分面图可视化方法我已经在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"
  )

加入第四个变量

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

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

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

参考资料

[1]

R语言书可视化之美: https://github.com/EasyChart/Beautiful-Visualization-with-R

本文分享自微信公众号 - 庄闪闪的R语言手册(Zss_R4ds),作者:庄闪闪

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-07

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「R」数据可视化14: 瀑布图

    Wiki上介绍的瀑布图分为两种,一类是2D形式,另一类是3D形式。我们简单介绍一下2D形式的瀑布图。该类瀑布图用于描述一系列中间正值或负值如何影响初始值。通常,...

    王诗翔呀
  • R可视乎|饼图

    饼图(pie chart)被广泛地应用于各个领域,用于表示不同分类的占比情况,通过弧度大小来对比各种分类。饼图通过将一个圆饼按照分类的占比划分成多个切片,整个圆...

    庄闪闪
  • R可视乎|圆环图

    对于饼图,上一次学习《R语言数据可视化之美》的时候主要利用graphics包和ggplot包(可见R可视乎|饼图)。这几天的学习中发现还有一个更加简便的方法——...

    庄闪闪
  • R可视乎|气泡图

    气泡图是一种多变量图表,是散点图的变体,也可以认为是散点图和百分比区域图的组合[1]。气泡图最基本的用法是使用三个值来确定每个数据序列,和散点图一样。气泡图通过...

    庄闪闪
  • R可视乎|马赛克图

    马赛克图(mosaic plot),显示分类数据中一对变量之间的关系,原理类似双向的100%堆叠式条形图,但其中所有条形在数值/标尺轴上具有相等长度,并会被划分...

    庄闪闪
  • R可视乎|等高线图

    等高线图(contour map) 是可视化二维空间标量场的基本方法[1],可以将三维数据使用二维的方法可视化,同时用颜色视觉特征表示第三维数据,如地图上的等高...

    庄闪闪
  • R可视乎|分面一页多图

    双变量数据可视化可能对于我们比较简单, 但是如果变量是三个或者更多,怎么在一幅图一起显示呢?今天我们就来讨论这个问题,解决方案有两种。

    庄闪闪
  • R可视乎|复合饼图系列

    散点复合饼图(compound scatter and pie chart)可以展示三个数据变量的信息:(x, y, P),其中x和y决定气泡在直角坐标系中的位...

    庄闪闪
  • R可视乎 | 散点图系列(1)

    散点图(scatter graph、point graph、X-Y plot、scatter chart )是科研绘图中最常见的图表类型之一,通常用于显示和比较...

    庄闪闪
  • R可视乎 | 散点图系列(2)

    散点图(scatter graph、point graph、X-Y plot、scatter chart )是科研绘图中最常见的图表类型之一,通常用于显示和比较...

    庄闪闪
  • R可视乎|克利夫兰点图系列

    在可靠性实验中,不同产品的测试失效时间可以通过克利夫兰点图进行可视化,今天就对该系列的图进行系统的介绍。主要参考张杰博士的《R语言数据可视化之美》[1],并结合...

    庄闪闪
  • R可视乎|决策树结果可视化

    决策树是一种非常有用的分类方法,它能够对新出现的对象给出正确的分类。比起文本描述的规则,我们更希望能使用图形来直观展示决策树的结果,这就是本文介绍的重点——决策...

    庄闪闪
  • maftools | 从头开始绘制发表级oncoplot(瀑布图)

    对于组学数据的分析和展示来说,maftools算是一个宝藏“R包”,可用于MAF格式的组学数据的汇总,分析和可视化展示。

    生信宝典
  • R可视乎|空间地理数据可视化(1)

    研究生讨论班第一次用 slides 作报告,主要讲了《Geospatial Health Data》[1]一书中关于空间地理数据可视化的内容。文末给出对应的 p...

    庄闪闪
  • R可视乎|主成分分析结果可视化

    主成分分析法是很常用的一种数据降维方法[1]。该方法可以减少数据的维数,并保持对方差贡献最大的特征,相当于保留低阶主成分,忽略高阶主成分。

    庄闪闪
  • ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)

    https://github.com/jokergoo/ComplexHeatmap

    西游东行
  • 瀑布图的一种改进方法

    可以看出,税前及付息前收益 -20,刚好等于前面的两个数之和,即:150 - 170,最后的净收益 6,刚好等于 -20 + 18 + 10 - 2 。

    数据森麟
  • 【追更进行时】Excel最强图表插件EasyShu: 一键多图神器

    历时365天,【Excel催化剂】与【EasyShu】联手升级的Excel图表插件EasyCharts 2.0版本-EasyShu,即将面世。接下来我们会陆陆续...

    Excel催化剂
  • R可视乎|2021年日历大派送

    一眨眼2020即将过去,2020年是杂乱的一年,感谢我们还活着。让我们放下这年,展望2021年吧。要不用R给2021年做个私人定制版日历吧?

    庄闪闪

扫码关注云+社区

领取腾讯云代金券