绘制非等高桑基图

1621人浏览 / 0人评论 / 添加收藏

很多时候,我们会有绘制非等高桑基图的需求。

本来我这个文章写了一次了,结果服务器出问题提交失败了。所以没耐心再写一次。

我就直接贴代码说明一下代码吧。

library(ggalluvial)

library(ggplot2)

td <- data.frame(name=c('1','2','3','4','5','4'), 

                          group=c('1','1','2','2','1', '2'), 

                          connect = c(1,2,1,2,3,3), 

                          value=c(1,1,1,10, 2,2))

ggplot(td,aes(x = group, stratum = name,

                      alluvium = connect, y = value, label=name,fill=name)) +  

                      geom_lode() + geom_flow() + 

                      geom_stratum(alpha = 0) +geom_text(stat = "stratum", nudge_x = 0.2)

ggplot参数说明

注意,请观察我数据的最后三行,如果说希望绘制出我这个类似的图形,既左边有多条边指向右边同一个矩形,这需要同时写左边输出的大小和右边输入的大小。

参数 功能
x 桑基图有几条柱子,每条柱子需要一个名称去区分, 例如上述例子中有两个柱子,分别为1和2,也就是X轴的名字
stratum 每一个柱子中矩形的名字,例如上述例子中,左侧柱子上有名为1,2,5的矩形,右侧有名为3,4的矩形
alluvium 柱子之间的流量关系,这个参数是看起来最反人类的,他的解释是这样的:例如我的表格中矩形2和矩形5都与矩形4有连接,这个连接关系就是alluvium控制的,如果说两个矩形之间有连接例如矩形2和矩形4有连接那么在上述例子中alluvium就都是2,也就是2号连接,同样的矩形5和矩形4之间alluvium都是3,表示3号连接。简单地说,就是有连接的块这个地方的数值是同一个值。
y 流量大小,上述参数确定了连接关系,那么这里就是为什么能画非等高的关键,就是确定连接的前后的y轴高度
label,fill 就是显示的文字和填充的颜色

关键就是alluvium必须是成对的,这个再强调一下

全部评论