networkD3 forceNetwork:如何更改图例文字颜色、文字标签颜色,并将文字标签置于最前面?

networkD3 forceNetwork:如何更改图例文字颜色、文字标签颜色,并将文字标签置于最前面?,networkd3,r,htmltools,Networkd3,R,Htmltools,我试图对使用R中的forcenetwork绘制的网络图进行一些调整 特别是,我想将文本标签颜色更改为黑色(或白色,用于黑色背景),并将文本标签置于节点的前面。标准选项使阅读文本标签变得非常困难,因为有些标签颜色太浅,而另一些标签则被密集的节点簇阻挡 如果我也能改变图例文本的颜色就好了,这样我就可以灵活地改变背景颜色 正如本文所指出的,一个可能的解决方案是劫持一些未使用的参数 forceNetwork(Links = MisLinks, Nodes = MisNodes, Source =

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

特别是,我想将文本标签颜色更改为黑色(或白色,用于黑色背景),并将文本标签置于节点的前面。标准选项使阅读文本标签变得非常困难,因为有些标签颜色太浅,而另一些标签则被密集的节点簇阻挡

如果我也能改变图例文本的颜色就好了,这样我就可以灵活地改变背景颜色

正如本文所指出的,一个可能的解决方案是劫持一些未使用的参数

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来设置背景颜色、为图例文本上色以及为节点标签文本上色。更改文本标签的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)
  )
)

forceNetwork
在设计时考虑了使用不同的节点颜色(如社区),如果您想以白色重新收集所有节点,请使用
simpleNetwork
我不尝试重新收集节点。我正在尝试分离节点颜色和标签颜色。具体来说,我希望节点在将所有文本标签颜色更改为黑色时保留其组特定颜色。我通过在networkD3库中乱用forceNetwork.js文件,成功地更改了图例文本颜色和标签文本颜色。有人知道是否可以将文本标签带到节点前面吗?@SeamusLam您可以发布标签着色的解决方案吗?@rrs下面的我的答案提供了一种设置标签文本颜色的方法