【问题标题】:Rstudio - Network D3 Sankey Node Value too Precise Using HtmlwidgetsRstudio - 使用 Htmlwidgets 的网络 D3 Sankey 节点值太精确
【发布时间】:2022-11-02 03:49:33
【问题描述】:

我使用 javascript 将节点标签及其名称和值添加到 RStudio 中的网络 D3 Sankey 中,如下所示:

javascript_string <- 
  'function(el, x){
    d3.select(el).selectAll(".node text")
      .text(d => d.name + " (" + d.value + ")");
  }'

生成的 Sankey 将其中一些值显示到小数点后 10 位,这太精确了。我只想让它显示最多 2 位小数的值。我要在这个 javascript 字符串中更改什么以将 d.value 限制为小数点后 2 位?

谢谢!

我尝试使用 javascript 字符串将带有名称和值的节点标签添加到 RStudio 中的网络 D3 sankey。它确实添加了我想要的标签,但结果图像中的一些值太精确了。我只想将其限制为小数点后 2 位。

【问题讨论】:

    标签: javascript rstudio sankey-diagram networkd3


    【解决方案1】:

    您可以使用 D3 格式功能将多种不同的格式应用于数字。见https://github.com/d3/d3-format

    例如,在这里我四舍五入到零小数点...

    library(networkD3)
    
    links <-
      read.table(header = TRUE, stringsAsFactors = FALSE, text = "
      source  target  value
      0       1       1.4
      1       2       2.9
      ")
    
    nodes <-
      read.table(header = TRUE, stringsAsFactors = FALSE, text = "
      name
      A
      B
      C
      ")
    
    sn <- sankeyNetwork(
      Links = links, 
      Nodes = nodes, 
      Source = 'source',
      Target = 'target', 
      Value = 'value', 
      NodeID = 'name'
      )
    
    javascript_string <- 
      'function(el, x){
        d3.select(el).selectAll(".node text")
          .text(d => d.name + " (" + d3.format("(.0f")(d.value) + ")");
      }'
    
    htmlwidgets::onRender(
      x = sn, 
      jsCode = javascript_string
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 2015-02-17
      • 2015-12-22
      • 1970-01-01
      • 2014-10-23
      相关资源
      最近更新 更多