❝桑基图可视化网络内变量(或节点)之间的比例流。术语“冲积图”通常可以互换使用。然而,一些人认为冲积图可视化了网络随时间的变化,而不是不同变量的变化。
❞
爱尔兰出生的工程师 Matthew HPR Sankey 给这些图表起了名字。桑基是英国皇家工程师协会的成员,他在土木工程师学会的会议纪要中首次展示了他的蒸汽机能量流图。在桑基的图表中,他直观地展示了实际蒸汽装置和理想蒸汽装置之间的差异(请注意,节点之间的链接表示热损失。实际的蒸汽装置显示,与理想化的蒸汽装置相比,热损失成比例地更多)。他的流程图引起了一些著名工程师的注意,他们后来认为这种视觉效果是“桑基图”。
参考文献:https://www.azavea.com/blog/2017/08/09/six-sankey-diagram-tool/
桑基图在生物信息领域应用广泛,比如ceRNA网络可视化、细胞通讯上下游可视化等。
❝不多不少,今天站长给大伙介绍10种桑基图的绘制方法或者R包。
❞
动态桑基图了解下,在坐的佬儿。
# Load package
library(networkD3)
# Load energy projection data
URL <- "https://cdn.rawgit.com/christophergandrud/networkD3/master/JSONdata/energy.json"
Energy <- jsonlite::fromJSON(URL)
# Now we have 2 data frames: a 'links' data frame with 3 columns (from, to, value), and a 'nodes' data frame that gives the name of each node.
head( Energy$links )
head( Energy$nodes )
# Thus we can plot it
p <- sankeyNetwork(Links = Energy$links, Nodes = Energy$nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
units = "TWh", fontSize = 12, nodeWidth = 30)
p
# save the widget
# library(htmlwidgets)
# saveWidget(p, file=paste0( getwd(), "/HtmlWidget/sankeyEnergy.html"))
特色是绘制动态的桑基图。
参考:https://r-graph-gallery.com/323-sankey-diagram-with-the-networkd3-library.html,https://rpubs.com/DragonflyStats/Sankey-networkD3
啊哈,我能在地图上绘制河流图!
还有著名的米纳德图:
参考:https://cran.r-project.org/web/packages/riverplot/index.html
遵循图形语法,和 ggplot2 无缝衔接。
# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggsankey")
library(ggsankey)
# install.packages("ggplot2")
library(ggplot2)
# install.packages("dplyr")
library(dplyr) # Also needed
ggplot(df, aes(x = x,
next_x = next_x,
node = node,
next_node = next_node,
fill = factor(node),
label = node)) +
geom_sankey(flow.alpha = 0.5, node.color = 1) +
geom_sankey_label(size = 3.5, color = 1, fill = "white") +
scale_fill_viridis_d() +
theme_sankey(base_size = 16) +
theme(legend.position = "none")
图形大法好,一下就有仨。这是第 2 个用于绘制冲积图的 ggplot2
拓展包。
# install.packages("ggalluvial")
library(ggalluvial)
data(vaccinations)
head(vaccinations)
# survey freq subject response start_date end_date
# 1 ms153_NSA 48 1 Always 2010-09-22 2010-10-25
# 2 ms153_NSA 9 2 Always 2010-09-22 2010-10-25
# 3 ms153_NSA 66 3 Always 2010-09-22 2010-10-25
# 4 ms153_NSA 1 4 Always 2010-09-22 2010-10-25
# 5 ms153_NSA 11 5 Always 2010-09-22 2010-10-25
# 6 ms153_NSA 1 6 Always 2010-09-22 2010-10-25
ggplot(data = vaccinations,
aes(axis1 = survey, # First variable on the X-axis
axis2 = response, # Second variable on the X-axis
axis3 = survey, # Third variable on the X-axis
y = freq)) +
geom_alluvium(aes(fill = response)) +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Survey", "Response"),
expand = c(0.15, 0.05)) +
theme_void()
给大家表演下旋转,倒立!上下布局:
参考:https://r-charts.com/flow/ggalluvial/
图形大法好,一下就有仨。这是第 3 个用于绘制冲积图的 ggplot2
拓展包。
ggbump
:凹凸有致才是YYDS。
最简单的例子
ggplot(df, aes(year, rank, color = country)) +
geom_bump()
毛胚房:
基础版:
高级货:
限量版:
参考:https://github.com/davidsjoberg/ggbump
人人都说图形大法好,而我独爱base R
!
参考:https://github.com/mbojan/alluvial
杀疯了!easyalluvial
表示不服,说前面的都是垃圾!还口口声声说一行代码即可创建冲积图!
可绘制交互式的图表:
suppressPackageStartupMessages( require(parcats) )
p = alluvial_wide(mtcars2, max_variables = 5)
parcats(p, marginal_histograms = TRUE, data_input = mtcars2)
这个是交互式
的,动图可以去官网看:
支持边际图
的绘制:
sankeyD3
:
circlize::chordDiagram
:环形和弦图
hiervis
:支持Sankey、Sunburst、Partition、Icicle 和 Treemap
OK,今天的分享到此为止,希望能对您有所帮助。
您的关注、点赞、在看、转发
是对益站最大的鼓励和支持
哈。
❝对本篇文章有疑问,可以在益站
❞发消息留言
,也欢迎各位童鞋来837738558
进行交流学习
。
微信扫一扫
关注该公众号