【问题标题】:Customize sankey diagram in R在 R 中自定义 sankey 图
【发布时间】:2018-09-04 14:19:20
【问题描述】:

使用 包中的sankeyNetwork(),我想稍微自定义一下生成的图表。可重现的代码如下:

library(networkD3)

links <- data.frame(source = c(0, 0, 0, 0, 0, 2, 2, 3, 3), target = c(1, 2, 3, 4, 5, 6, 7, 6, 7), value = c(70, 56.4, 48.7, 0.9, 338.8, 50.8, 5.6, 47.3, 1.4))
nodes <- data.frame(name = c("Cu in obsolete TVs", "Illegal export", " Domestic recycling", "Open burning", "Dumping landfill", "Reuse", "Material recovery", "Material loss"))

sankeyNetwork(Links=links, Nodes=nodes, Source='source', Target='target',
          Value='value', NodeID='name', fontSize=16, sinksRight = FALSE)

我想通过以下方式自定义生成的图表:

  1. 我想将标签“Cu in obsolete TVs”移动到对应节点的框左侧。

  2. 我想将框的宽度加倍以供重复使用。

【问题讨论】:

    标签: networkd3 r sankey-diagram htmlwidgets networkd3


    【解决方案1】:

    使用networkD3 的内置选项无法实现您想要的自定义,但您可以通过使用 onRender() 在加载时运行自定义JavaScript 来实现它们。例如(也在sankeyNetwork()函数中增加了右边距,所以左对齐标签不会被截断):

    library(networkD3)
    library(htmlwidgets)
    
    links <- data.frame(source = c(0, 0, 0, 0, 0, 2, 2, 3, 3), target = c(1, 2, 3, 4, 5, 6, 7, 6, 7), value = c(70, 56.4, 48.7, 0.9, 338.8, 50.8, 5.6, 47.3, 1.4))
    nodes <- data.frame(name = c("Cu in obsolete TVs", "Illegal export", " Domestic recycling", "Open burning", "Dumping landfill", "Reuse", "Material recovery", "Material loss"))
    sn <- sankeyNetwork(Links=links, Nodes=nodes, Source='source', Target='target',
                  Value='value', NodeID='name', fontSize=16, sinksRight = FALSE, 
                  margin = list(right = 150))
    
    onRender(sn,
      '
      function(el,x) {
        d3.select(el)
          .selectAll(".node text")
          .filter(function(d) { return d.name == "Cu in obsolete TVs"; })
          .attr("x", x.options.nodeWidth - 16)
          .attr("text-anchor", "end");
    
        d3
          .selectAll("rect")
          .filter(function (d, i) { return i === 5;})
          .attr("width", x.options.nodeWidth * 2);
      }
      '
    )
    

    【讨论】:

    • 非常感谢 CJ Yetman。同样对于您之前在另一篇文章中的回答,我发现无法调整节点的垂直距离。我对这个图表还有另一个问题。我们可以将每个链接的值放入图表中吗?
    • 您必须更具体地说明“放置值”的含义...该值已包含在每个链接的工具提示中...并且最好在新问题中提出使其更容易被其他用户看到/使用
    • 我已经按照您在stackoverflow.com/questions/52226342/… 的建议提出了一个新问题。非常感谢。
    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2022-10-04
    • 2021-10-19
    • 1970-01-01
    • 2015-04-14
    • 2023-03-02
    相关资源
    最近更新 更多