如何提取Plotly Sankey图中节点的X、Y坐标?
Plotly桑基图节点坐标的存储与提取(R语言示例)
一、桑基图节点坐标的存储位置
Plotly中type = "sankey"的桑基图,其节点的X/Y坐标直接存储在生成的Plotly对象内部,具体路径为:
- X坐标:
plotly_obj$x$data[[1]]$node$x - Y坐标:
plotly_obj$x$data[[1]]$node$y
其中plotly_obj是你生成的桑基图对象,[[1]]是因为桑基图通常为单数据集图表,node下的x和y对应节点的归一化坐标(范围一般为0到1,X轴从左到右、Y轴从上到下)。如果手动指定过节点坐标,提取的就是自定义值;未指定的话,就是Plotly自动分配的布局坐标。
二、R语言实操:提取节点名称与坐标
下面用完整代码示例演示从生成桑基图到提取坐标的全流程:
1. 先生成桑基图示例
library(plotly) # 定义节点和链接数据 nodes <- data.frame(name = c("A1", "A2", "B1", "B2", "C1", "C2")) links <- data.frame( source = c(0, 0, 1, 1), # 节点索引从0开始 target = c(2, 3, 4, 5), value = c(10, 20, 15, 25) ) # 生成桑基图对象 sankey_plot <- plot_ly( type = "sankey", node = list( label = nodes$name, color = c("#636efa", "#ef553b", "#00cc96", "#ab63fa", "#ffa15a", "#19d3f3") ), link = list( source = links$source, target = links$target, value = links$value ) )
2. 提取坐标并生成数据框
运行以下代码,从桑基图对象中提取节点信息并合并为新数据框:
# 提取节点名称 node_names <- sankey_plot$x$data[[1]]$node$label # 提取X、Y坐标 node_x <- sankey_plot$x$data[[1]]$node$x node_y <- sankey_plot$x$data[[1]]$node$y # 合并为数据框 node_coords <- data.frame( node_name = node_names, x_coord = node_x, y_coord = node_y ) # 查看结果 print(node_coords)
典型输出结果
坐标值由Plotly自动分配,结果类似:
node_name x_coord y_coord 1 A1 0.0 0.2500000 2 A2 0.0 0.7500000 3 B1 0.5 0.1666667 4 B2 0.5 0.5000000 5 C1 1.0 0.3333333 6 C2 1.0 0.6666667
内容的提问来源于stack exchange,提问作者Obed
相关产品推荐
相关产品推荐

