Изменить цвет фона сюжета networkD3
Скажем, я делаю сюжет networkD3 - используя минимальный пример в пакете
#
library(networkD3)
# Load data
data(MisLinks)
data(MisNodes)
# Plot
forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Group = "group", opacity = 0.8)
Если я открою это в браузере, я смогу использовать инструменты разработчика, чтобы изменить цвет фона тела, например: background-color: #DAE3F9;"
Есть ли способ автоматически определить цвет фона графика (от белого по умолчанию) до другого цвета, не открывая в браузере? По сути, можем ли мы добавить CSS непосредственно в код, как мы можем добавить функции JS?
2 ответа
Вот мой взлом на это. Это не красиво, но я добавил функцию в linkDistance
аргумент сделать грязную работу. Будем надеяться, что кто-то в конце концов найдет менее смелое решение:
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;}'))
Другой, не очень привлекательный вариант - добавить clickAction
аргумент (например, clickAction = 'd3.select("body").style("background-color", "#DAE3F9")'
), но это только изменит фон, если пользователь щелкнет узел.
Если возможно, мы можем использовать помощь htmltools
несколькими способами.
library(networkD3)
# Load data
data(MisLinks)
data(MisNodes)
# Plot
forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Group = "group", opacity = 0.8)
library(htmltools)
# don't like using the !important modifier
# but without script not sure there is another way
# to override the default white background
browsable(
tagList(
tags$head(
tags$style('body{background-color: #DAE3F9 !important}')
),
forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Group = "group", opacity = 0.8)
)
)
# if you want to limit the background-color to
# the htmlwidget, we could wrap in tags$div
browsable(
tags$div(
style = "background-color:#DAE3F9;",
forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Group = "group", opacity = 0.8)
)
)
# if you are ok with script then we
# we could do something like this
browsable(
tagList(
forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Group = "group", opacity = 0.8),
tags$script(
'
document.body.style.backgroundColor = "#DAE3F9"
'
)
)
)