【问题标题】:how to make sankyplots with no color for source and target node and how to do legend to show the different colors of linkgroup如何为源节点和目标节点制作没有颜色的 sankey 图以及如何制作图例以显示链接组的不同颜色
【发布时间】:2022-01-04 10:30:27
【问题描述】:

我正在处理网络数据,并希望使用 中的 包中的 sankeyNetwork() 将其可视化。 在我的数据框中,我有一个源节点和一个目标节点、值和一个分组列组。

  1. 如何在不着色节点的情况下制作 sankey 图(源和目标都没有颜色)?
  2. 我想通过变量组LinkGroup = "group" 为链接线着色,并且我想知道如何制作图例以显示链接的不同颜色实际上代表组变量。

这里是代码和数据框...

# Libraries
library(dplyr)
library(tidyr)
library(tibble)
library(networkD3)

# Load dataset from github

data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/13_AdjacencyDirectedWeighted.csv", header=TRUE) %>%
  rownames_to_column() %>%
  gather(key = "key", value = "value", -rowname) %>%
  filter(value > 0) %>% 
  rename(source = rowname,  target =key) %>%
  select("source", "target", "value") %>%
  mutate(group = c(rep("A", 10), rep("B",7), rep("C", 8), rep("D", 10)))
nodes <- data.frame(name=c(as.character(data$source), as.character(data$target)) %>% unique())

data$IDsource=match(data$source, nodes$name)-1 
data$IDtarget=match(data$target, nodes$name)-1

# Make the Network
sankeyNetwork(Links = data,
              Nodes = nodes,
              Source = "IDsource",
              Target = "IDtarget",
              Value = "value",
              NodeID = "name", 
              sinksRight=FALSE,
              nodeWidth=40,
              fontSize=13,
              nodePadding=20,
              LinkGroup = "group")

【问题讨论】:

  • “无色”是指白色吗?
  • 是的,可以....我的目标不是为节点着色,而是根据组变量仅对链接器线着色,并为链接器线提供图例

标签: networkd3 r javascript r d3.js sankey-diagram htmlwidgets


【解决方案1】:

您可以继续让链接节点根据它们的组自动选择颜色,并使用NodeGroup = NULL 选项/参数有效地关闭节点的着色

sankeyNetwork(Links = data,
              Nodes = nodes,
              Source = "IDsource",
              Target = "IDtarget",
              Value = "value",
              NodeID = "name", 
              sinksRight=FALSE,
              nodeWidth=40,
              fontSize=13,
              nodePadding=20,
              LinkGroup = 'group',
              NodeGroup = NULL)


networkD3 没有任何内置的图例创建选项,但是,如果您想自己制作图例,您可能需要使用一组一致的颜色,以便您可以将它们与您使用的任何东西一起使用创造一个传奇。你可以这样做......

colourScale <- 
  'd3.scaleOrdinal()
     .domain(["A", "B", "C", "D"])
     .range(["red", "blue", "green", "yellow"])'

sankeyNetwork(Links = data,
              Nodes = nodes,
              Source = "IDsource",
              Target = "IDtarget",
              Value = "value",
              NodeID = "name", 
              sinksRight=FALSE,
              nodeWidth=40,
              fontSize=13,
              nodePadding=20,
              LinkGroup = 'group',
              NodeGroup = NULL,
              colourScale = colourScale)

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多