networkD3 forceNetwork:如何更改图例文本颜色,文本标签颜色,并将文本标签带到前面?

我正在尝试对使用R中的
networkd3 forcenetwork绘制的网络图进行一些调整.

特别是,我想将文本标签颜色更改为黑色(或白色,黑色背景),并将文本标签更改为节点的前面.标准选项使得读取文本标签非常困难,因为某些标签颜色太浅,而其他标签则受到密集节点簇的阻碍.

如果我也可以更改图例文本颜色会很好,这样我就可以灵活地更改背景颜色.

在这篇文章here中指出的一种可能的解决方案是劫持一些未使用的参数.

forceNetwork(Links = MisLinks, Nodes = MisNodes,
   Source = "source", Target = "target",
   Value = "value", NodeID = "name",
   Group = "group", opacity = 0.8,
   linkDistance = 
     JS('function(){d3.select("body").style("background-color", "#DAE3F9");return 50;}'))

但是,由于没有JS的知识,我不知道如何编写它或者它是否可能.

最佳答案 您可以添加自定义CSS以设置背景颜色,为图例文本着色,并使用
htmltools包为节点标签文本着色.更改文本标签的z顺序会复杂得多,因为你必须重新排序SVG中的元素,我不确定它是否值得.

library(networkD3)
library(htmltools)

browsable(
  tagList(
    tags$head(
      tags$style('
        body{background-color: #DAE3F9 !important}
        .nodetext{fill: #000000}
        .legend text{fill: #FF0000}
      ')
    ),
    forceNetwork(Links = MisLinks, Nodes = MisNodes,
                 Source = "source", Target = "target",
                 Value = "value", NodeID = "name",
                 Group = "group", opacityNoHover = 1, 
                 fontSize = 12, legend = T, zoom = T)
  )
)
点赞