plotly Sankey 图:如何更改节点的默认顺序
plotly Sankey diagram: How to change default order of nodes
我使用 plotly
包创建了一个 Sankey 图。
据我所知,节点的默认顺序主要由值定义。但是,我想要按字母顺序排列,而无需使用鼠标药物手动移动节点。
我可以用 R 更改默认顺序吗?
如有任何帮助,我们将不胜感激。下面是示例代码和输出:
node_label <- c("x1_1", "x1_2", "x2_1", "x2_2")
link_source <- c(0, 0, 1, 1)
link_target <- c(2, 3, 2, 3)
link_value <- c(2, 5, 1, 3)
# when link_value <- c(5, 2, 1, 3), the order is changed.
plotly::plot_ly(
type = "sankey",
domain = list(x = c(0,1), y = c(0,1)),
node = list(label = node_label),
link = list(
source = link_source,
target = link_target,
value = link_value))
这可能值得检查,但我发现它对我的情况很有帮助(图表有点复杂)。
如果,当您组织数据标签时,请确保按照您希望显示的顺序组织列表。
例如,如果有一个节点需要提前进入(左),只需在其余节点之前弹出它
labelList.insert(0, labelList.pop(labelList.index(first_node_label)))
然后将 labelList
插入 go
,您应该对结构有一些(虽然不是绝对的)控制。
在@banderlog013的建议下,我实现了手动定义节点的顺序。
非常感谢!!!
以下是我的示例答案。
node_label <- c("x1_1", "x1_2", "x2_1", "x2_2")
node_x <- c(0, 0, 1, 1)
node_y <- c(0, 1, 0, 1)
link_source <- c(0, 0, 1, 1)
link_target <- c(2, 3, 2, 3)
link_value <- c(2, 5, 1, 3)
plotly::plot_ly(
type = "sankey",
arrangement = "snap",
node = list(
label = node_label,
x = node_x,
y = node_y,
pad = 20),
link = list(
source = link_source,
target = link_target,
value = link_value))
请在节点上加点药以反映节点位置。
我使用 plotly
包创建了一个 Sankey 图。
据我所知,节点的默认顺序主要由值定义。但是,我想要按字母顺序排列,而无需使用鼠标药物手动移动节点。
我可以用 R 更改默认顺序吗?
如有任何帮助,我们将不胜感激。下面是示例代码和输出:
node_label <- c("x1_1", "x1_2", "x2_1", "x2_2")
link_source <- c(0, 0, 1, 1)
link_target <- c(2, 3, 2, 3)
link_value <- c(2, 5, 1, 3)
# when link_value <- c(5, 2, 1, 3), the order is changed.
plotly::plot_ly(
type = "sankey",
domain = list(x = c(0,1), y = c(0,1)),
node = list(label = node_label),
link = list(
source = link_source,
target = link_target,
value = link_value))
这可能值得检查,但我发现它对我的情况很有帮助(图表有点复杂)。 如果,当您组织数据标签时,请确保按照您希望显示的顺序组织列表。
例如,如果有一个节点需要提前进入(左),只需在其余节点之前弹出它
labelList.insert(0, labelList.pop(labelList.index(first_node_label)))
然后将 labelList
插入 go
,您应该对结构有一些(虽然不是绝对的)控制。
在@banderlog013的建议下,我实现了手动定义节点的顺序。
非常感谢!!!
以下是我的示例答案。
node_label <- c("x1_1", "x1_2", "x2_1", "x2_2")
node_x <- c(0, 0, 1, 1)
node_y <- c(0, 1, 0, 1)
link_source <- c(0, 0, 1, 1)
link_target <- c(2, 3, 2, 3)
link_value <- c(2, 5, 1, 3)
plotly::plot_ly(
type = "sankey",
arrangement = "snap",
node = list(
label = node_label,
x = node_x,
y = node_y,
pad = 20),
link = list(
source = link_source,
target = link_target,
value = link_value))
请在节点上加点药以反映节点位置。