Всплывающие подсказки (не узловые) в forceNetwork и htmlwidgets networkD3

1

Мои поиски способа прикрепления всплывающих подсказок к ссылкам (то есть кромкам) между узлами с помощью forceNetwork идут пустым. Это наиболее важные примеры, которые я нашел:

Итак, как вы добавляете всплывающие подсказки для ссылок forceNetwork? Является ли это возможным? Я вижу, что forceNetwork имеет атрибут clickAction, который вы можете использовать для вызова JS с htmlwidgets. К сожалению, clickAction, похоже, действует на узлы, а не на связи между ними.

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

library(networkD3)
library(htmlwidgets)

# Load data
data(MisLinks)
data(MisNodes)  

# Make network using sample data
fn <- forceNetwork(
  Links  = MisLinks, Nodes   = MisNodes,
  Source = "source", Target  = "target",
  Value  = "value",  NodeID  = "name",
  Group  = "group"
)

# Get the target variable in fn$x$links (an integer id) to show up as a tooltip when user hovers over a link (i.e. edge) in the graph
fnrender <- htmlwidgets::onRender(
  fn,
  '
  function(el, x) {
  d3.selectAll(".link").select("title")
  .text(function(d) { return d.target; });
  }
  '
)

# display the result
fnrender 

Моя цель состоит в том, чтобы иметь строковую переменную, описывающую связь между двумя узлами, когда пользователь наводится на связь между ними. Любые предложения о том, как двигаться вперед, будут высоко оценены.

Теги:
htmlwidgets
networkd3

1 ответ

1
Лучший ответ

Вы должны "добавить" название...

library(networkD3)
library(htmlwidgets)

# Load data
data(MisLinks)
data(MisNodes)

# Make network using sample data
fn <- forceNetwork(
  Links  = MisLinks, Nodes   = MisNodes,
  Source = "source", Target  = "target",
  Value  = "value",  NodeID  = "name",
  Group  = "group"
)

# Get the target variable in fn$x$links (an integer id) to show up as a tooltip when user hovers over a link (i.e. edge) in the graph
fnrender <- htmlwidgets::onRender(
  fn,
  '
  function(el, x) {
    d3.selectAll(".link").append("svg:title")
      .text(function(d) { return d.source.name + " -> " + d.target.name; })
  }
  '
)

# display the result
fnrender

Ещё вопросы

Сообщество Overcoder
Наверх
Меню