使用
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):
我还想简化悬停上的文本。事实上,我想删除“源”和“目标”信息,只需添加以下文本:
value : [links$value]
我尝试过使用 hovertemplate
但显然它不再是有效的属性。这是预期的输出:
提前谢谢您。
在 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
})
)
如果您对此有任何疑问或问题,请告诉我。