如何在R中制作圆形Sankey图表?

qfe3c7zg  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(112)

我目前正在做一个项目,我需要在R中创建一个圆形的Sankey图表,外观类似于transformative maps used by the World Economic Forum。是否有解决方案?
我使用的数据类型的一个小例子看起来像这样:
| Point_from(内圆)|指向(外圆)|值|信息|
| --|--|--|--|
| 一|D| 1 |蓝色|
| 一|E| 1 |蓝色|
| B| E| 3 |绿色|
| B| F| 1 |蓝色|
| C| G| 1 |蓝色|
在这个例子中,我们有通过值(连接强度)连接的点,每个连接都有一个与之关联的额外指示器(链接上的信息-以交互方式探索)。
如果任何人有任何见解,R代码示例,或适合创建这样的圆形Sankey图表的R软件包的建议,我将非常感谢您的帮助。
谢谢你提前:)
我找不到任何有合适输出的解决方案,也没有在线材料/教程解释如何做到这一点。我无法使sankey图表脚本从networkD 3循环。另一个选择是做一个网络分析,也许?但是我不能以循环的方式定位这些点(网络图的基础是使用这个例子https://ladal.edu.au/net.html完成的)。

fcipmucu

fcipmucu1#

看起来你在寻找一个循环图。你可以使用tidygraphggraph生态系统来生成类似这样的东西:

library(tidygraph)
library(ggraph)
library(ggforce)

data.frame(from = 'z', to = unique(df$from), Value = 0, Info = NA) |>
  rbind(df) |>
  as_tbl_graph() |>
  ggraph(layout = 'tree', circular = TRUE) +
  geom_circle(aes(x0 = 0, y0 = 0, r = 1), size = 0.1, color = 'gray') +
  geom_circle(aes(x0 = 0, y0 = 0, r = 0.5), size = 0.1, color = 'gray') +
  geom_edge_elbow(aes(width = Value, color = Info), alpha = 0.5) +
  geom_node_point(aes(size = ifelse(name == 'z', NA, 10)),
                  shape = 21, fill = 'white') +
  geom_node_text(aes(label = ifelse(name == 'z', '', name))) +
  theme_graph() +
  theme(legend.position = 'none') +
  scale_edge_color_manual(values = c(BLUE = 'blue3', GREEN = 'green4'),
                          na.value = 'transparent') +
  scale_size_identity()

问题中的数据为可重现格式

df <- structure(list(from = c("A", "A", "B", "B", "C"), to = c("D", 
"E", "E", "F", "G"), Value = c(1L, 1L, 3L, 1L, 1L), Info = c("BLUE", 
"BLUE", "GREEN", "BLUE", "BLUE")), class = "data.frame", row.names = c(NA, 
-5L))

相关问题