在桑基图中显示值并修改悬停(R 图)

问题描述 投票:0回答:1

使用

plotly
制作桑基图的示例代码。

links <- data.frame(
  source=c("group_A","group_A", "group_B", "group_C", "group_C", "group_E"), 
  target=c("group_C","group_D", "group_E", "group_F", "group_G", "group_H"), 
  value=c(2,3, 2, 3, 1, 3)
)

nodes <- data.frame(
  name=c(as.character(links$source), 
         as.character(links$target)) %>% unique()
)

links$IDsource <- match(links$source, nodes$name)-1 
links$IDtarget <- match(links$target, nodes$name)-1

plot_ly(
  type = "sankey",
  orientation = "h",
  textfont = list(size=11),
  node = list(
    label = nodes$name,
    pad = 15,
    thickness = 20),
  link = list(
    source = links$IDsource,
    target = links$IDtarget,
    value =  links$value))

是否可以在每个链接上添加“值”? (例如,参见我的照片1):
photo1

我还想简化悬停上的文本。事实上,我想删除“源”和“目标”信息,只需添加以下文本:

value : [links$value]
我尝试过使用
hovertemplate
但显然它不再是有效的属性。这是预期的输出: photo2

提前谢谢您。

r plotly sankey-diagram
1个回答
0
投票

在 Plotly 中的 Sankey 中,您有两个地方可以设置

hovertemplate
hoverinfo
:节点和链接。

如果您只想在悬停中显示节点,则需要将链接的悬停设置为无,并将节点的悬停设置为您想要的格式:

link = list(hovertemplate ...
node = list(hoverinfo = "none"...

如果要删除源标签和目标标签,请在

textfot = list(color = "transparent"...
中将颜色设置为透明。

如果要向绘图添加值,则必须使用绘图域(其中 x 和 y 的值都在 0 到 1 之间)并使用

annotations
为每个节点创建标签。

这是一个示例。

plot_ly(
  type = "sankey",
  orientation = "h",
  textfont = list(color = "transparent"), # <---- I'm new
  node = list(
    hoverinfo = "none",                   # <---- I'm new
    label = nodes$name,
    pad = 15,
    thickness = 20),
  link = list(
    hovertemplate = "value: %{value}<extra></extra>", # <---- I'm new
    source = links$IDsource,
    target = links$IDtarget,
    value =  links$value)) %>% 
  layout(annotations = lapply(1:nrow(links), function(j) { # <---- I'm new
    list(x = c(.25, .5, .25, .75, .75, .75)[j],  # arbitrary values to align with plot
         y = c(2/3, .95, .15, 2/3, .45, .15)[j], 
         text = links$value[j],                  # show values
         xref = "paper",                         # use the plot domain
         yref = "paper",
         showarrow = F)                          # no arrows necessary
  })
  )

Sankey

Sankey different perspective

如果您对此有任何疑问或问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.