Изменить цвет шрифта диаграммы Санки с помощью `networkD3` - PullRequest
0 голосов
/ 20 марта 2020

Я хочу изменить цвет шрифта или добавить тень в шрифте, чтобы улучшить видимость. Однако я не нашел способ сделать это. Один из вариантов - использовать плотно, но когда вы помещаете незакрашенный объект в блестящее приложение и визуализируете его в мобильном телефоне, вы теряете интерактивные метки, поэтому networkD3 упрощает интеграцию. Единственная проблема в том, что у меня есть трудности с персонализацией одежды. Я хочу изменить цвет шрифта.

Воспроизводимый пример:

library(networkD3)
URL <- paste0('https://cdn.rawgit.com/christophergandrud/networkD3/',
              'master/JSONdata/energy.json')
energy <- jsonlite::fromJSON(URL)

# Plot
sankeyNetwork(Links = energy$links, Nodes = energy$nodes, Source = 'source',
              Target = 'target', Value = 'value', NodeID = 'name',
              units = 'TWh', fontSize = 12, nodeWidth = 30)

1 Ответ

1 голос
/ 20 марта 2020

Текстовые элементы могут изменить мое добавление скрипта onRender из пакета htmlwidgets. Эта функция позволяет запускать дополнительные функции javascript для выбора и изменения элементов с помощью D3. Структура функции:

p <- onRender(myplot,'function(el, x){ 
    ...
}') 

Используя этот пример, вы можете выбрать метки, используя d3.selectAll (при этом возвращается каждый элемент; используйте d3.select() только для одного элемента или только для первого элемента).

// Sankey selector for node labels
d3.selectAll(".node text")

Изменение цвета элемента <text> можно выполнить с помощью style('some prop', 'some value'). Например, допустим, мы хотим изменить текст на blue.

d3.selectAll(".node text").style("fill", "blue") // or hex, rgb, hsl, etc.

Используя приведенный выше пример, вот как вы могли бы написать его.

library(networkD3)
URL <- 'https://cdn.rawgit.com/christophergandrud/networkD3/master/JSONdata/energy.json'
energy <- jsonlite::fromJSON(URL)

# Plot
sankey <- sankeyNetwork(
  Links = energy$links, Nodes = energy$nodes, Source = 'source',
  Target = 'target', Value = 'value', NodeID = 'name',
  units = 'TWh', fontSize = 12, nodeWidth = 30
)

# render with js
sankey_rendered <- htmlwidgets::onRender(sankey,
  'function(el, x) {
    d3.selectAll(".node text")
        .style("fill", "blue");
  }'
)

# show
sankey_rendered

Если вы хотите чтобы сделать больше с метками (т. е. событиями мыши, щелчками), присвойте результат выбора D3 переменной.

var labels = d3.selectAll(".node text");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...