【问题标题】:Adjust background picture and title for plot from networkD3's forceNetwork从networkD3的forceNetwork调整背景图片和标题
【发布时间】:2018-12-18 08:16:43
【问题描述】:

按照此处Change the color of the legend text in forceNetwork for networkD3 的帖子,我正在尝试将本地驱动器中的图片添加为背景图像,并为图表添加标题。

但是,这些行似乎没有生效:

Background:    .style("background-image", "url(C:\\Desktop\\BGP.png)")
Title:          htmlwidgets::prependContent(htmltools::tags$h1("Title"))

添加它们的正确方法是什么?另外,有没有办法调整标题文本的字体样式和大小?

library(networkD3)
library(htmlwidgets)

subNodes <- 
  read.table(stringsAsFactors = FALSE, header = TRUE, text = "
             nodeName nodeGroup     nodeSize
             Bob      NorthAmerica  10
             Alice    NorthAmerica  10
             Tom      China         10
             John     Japan         10
             ")

subLinkList <-
  read.table(stringsAsFactors = FALSE, header = TRUE, text = "
             root  children  linkValue
             0     1         1
             0     2         1
             0     3         1
             ")

linkJS <- JS('
  function(){
             d3.select("body")
             .style("background-image", "url(C:\\Desktop\\BGP.png)")
             .style("background-repeat", "no-repeat")
             .style("background-position", "right bottom")
             return 100;
             }')

network <- forceNetwork(Links = subLinkList, Nodes = subNodes,
               Source = "root", Target = "children",
               Value = "linkValue", NodeID = "nodeName",
               Group = "nodeGroup", 
               opacity = 1, Nodesize = "nodeSize",
               legend = TRUE, linkDistance = linkJS,
               colourScale = JS("d3.scaleOrdinal(d3.schemeCategory20)"))

network1 <- htmlwidgets::onRender(
  network,
  'function(el, x) { 
  d3.selectAll(".legend text").style("fill", "white");
  d3.select("body").style("background-color", "#144370");
  }',
  htmlwidgets::prependContent(htmltools::tags$h1("Title"))
)


saveNetwork(network1, "c:\\forceNetwork.html", selfcontained = TRUE)

【问题讨论】:

  • 文件的 URL 可能需要以“file:///”开头,以告诉浏览器查找本地文件。但即便如此,您的浏览器也可能不允许加载绝对本地文件 URL。
  • 这个答案可能有助于将文件放在正确的位置并使用相对 URL...stackoverflow.com/a/49669260/4389763
  • @CJYetman,感谢您的评论。能否请您也帮助“标题”部分?
  • 这是一种非常相似的文本样式技术:stackoverflow.com/a/50678496/4389763
  • @CJYetman,我尝试了不同的编辑,但仍然无法获得它。

标签: javascript r d3.js htmlwidgets networkd3


【解决方案1】:

这是一个可重现的示例,它添加标题、设置标题样式、设置图例文本样式、更改背景颜色,并尝试使用本地文件设置背景图像。 (我无法测试背景图片,因为它取决于许多特定因素,但它可能对您有用。)...

library(networkD3)
library(htmlwidgets)

subNodes <- 
  read.table(stringsAsFactors = FALSE, header = TRUE, text = "
             nodeName nodeGroup     nodeSize
             Bob      NorthAmerica  10
             Alice    NorthAmerica  10
             Tom      China         10
             John     Japan         10
             ")

subLinkList <-
  read.table(stringsAsFactors = FALSE, header = TRUE, text = "
             root  children  linkValue
             0     1         1
             0     2         1
             0     3         1
             ")

network <- forceNetwork(Links = subLinkList, Nodes = subNodes,
                        Source = "root", Target = "children",
                        Value = "linkValue", NodeID = "nodeName",
                        Group = "nodeGroup", 
                        opacity = 1, Nodesize = "nodeSize",
                        legend = TRUE)

network <- htmlwidgets::prependContent(network, htmltools::tags$h1("Title"))

network <- htmlwidgets::onRender(
  network,
  'function(el, x) { 
    d3.selectAll(".legend text").style("fill", "white");
    d3.select("body").style("background-color", "#144370");
    d3.select("h1").style("color", "red").style("font-family", "sans-serif");
    d3.select("body")
      .style("background-image", "url(file://C:\\Desktop\\BGP.png)")
      .style("background-repeat", "no-repeat")
      .style("background-position", "right bottom");
  }'
)


saveNetwork(network, "~/Desktop/forceNetwork.html", selfcontained = TRUE)

【讨论】:

  • 非常感谢!你是这方面的真正专家!
  • 我通过“...htmltools::tags$h1(style = "color: green", "TITLE")) 更改行以更改标题颜色。当文件为打开后,一旦出现背景色,标题字体颜色就会自动变回红色。有什么解决办法吗?谢谢。
  • 以上字体颜色仅适用于某些情况,而另一些则效果很好。另一方面,背景图像路径有效,只要给出“file://C:\\BGP.png”,不管图像文件的确切位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
相关资源
最近更新 更多