2016-04-27 11 views
1

Есть ли способ использовать узел в качестве ссылки на внешний веб-сайт, используя функцию forceNetwork() в пакете networkD3 в r? Я думал, может быть, изменил clickAction?связывание узла в сетиD3 с веб-сайтом с помощью clickAction = NULL

Пример данных:

library(networkD3) 
data(MisLinks) 
data(MisNodes) 

# Create a random URL in the nodes dataset 
MisNodes$URL <- paste0("http://www.RANDOMLINK_", sample(1:100, NROW(MisNodes)), ".com") 
head(MisNodes) 

MyClickScript <- 'alert(d.index)' 

forceNetwork(Links = MisLinks, Nodes = MisNodes, 
      Source = "source", Target = "target", 
      Value = "value", NodeID = "name", 
      Group = "group", opacity = 0.8, 
      clickAction = MyClickScript) 

Желаемый результат: Когда пользователь нажимает на узле, новая вкладка откроется (например, window.open), что указывает на соответствующий URL-адрес для узла - Как я могу получить clickAction указать до MisNodes$URL[d.index]?

+0

Да, что вы пробовали? Вы можете сделать что-то вроде «MyClickScript <-» window.open («http://www.google.com»); 'и затем передать' MyClickScript' в 'clickAction' - например,' forceNetwork (..., clickAction = MyClickScript) ' – JasonAizkalns

+0

Спасибо, Джейсон. Я действительно пытался увидеть, может ли каждый узел иметь свой собственный адрес ссылки. Понимаете, у меня есть сеть преподавателей в нашей исследовательской программе, и я старался, чтобы каждый узел был преподавателем, однажды щелкнув на этом узле/преподавателе, он откроет этот веб-сайт определенного факультета. – fjvost

+0

Можете ли вы предоставить некоторые данные образца? Являются ли веб-сайты факультета стандартизированными? Например, 'http: // www.school.edu/faculty1',' http: // www.school.edu/faculty2' и т. Д. – JasonAizkalns

ответ

4

networkD3 дизайн не делает это легким. Вот один из способов ответа. Я попытаюсь прокомментировать, чтобы объяснить, что мы делаем на каждом шаге.

library(networkD3) 

# example from ?forceNetwork 
data(MisLinks) 
data(MisNodes) 
# Create graph 
fn <- forceNetwork(
    Links = MisLinks, Nodes = MisNodes, Source = "source", 
    Target = "target", Value = "value", NodeID = "name", 
    Group = "group", opacity = 0.4, zoom = TRUE 
) 

# let's look at our forceNetwork 
# nodes are provided to JavaScript 
# in a nodes data.frame 
str(fn$x$nodes) 

# make up some links to demonstrate 
# how we can add them to our nodes df 
fn$x$nodes$hyperlink <- paste0(
    'http://en.wikipedia.org/wiki/Special:Search?search=', 
    MisNodes$name 
) 

# then with our hyperlinks in our data 
# we can define a click action to open 
# the hyperlink for each node in a new window 
fn$x$options$clickAction = 'window.open(d.hyperlink)' 

fn 
+0

@ своевременный портфель Ваш ответ чрезвычайно полезен для моей работы в сетиD3. Не могли бы вы также указать мне документацию или ссылку на все другие параметры, которые я могу сделать с помощью 'fn $ x', например jsHooks и т. Д.? Я был бы обязан. – sigmabeta

+0

У вас есть что-то особенное в виду? В общем, 'htmlwidgets :: onRender' - мой основной выбор для манипулирования пост-рендерингом с помощью JavaScript. В приведенном выше случае, хотя нам нужны дополнительные данные из R, поэтому 'onRender' будет недостаточным. Поскольку 'htmlwidget' является« списком », мы можем изменить его после создания. – timelyportfolio

+0

Итак, я смотрел на эту [ссылку] (http://www.coppelia.io/2014/07/an-a-to-z-of-extra-features-for-the-d3-force-layout/) для добавления некоторых дополнительных свойств к свойствам узлов или ссылок, например. И я вижу, что я получаю fn $ jsHooks, когда перечисляю все опции под fn в Rstudio. Я думал, может быть, есть способ написать какой-то пользовательский javascript в этих jsHooks. Кроме того, какие все возможные вещи можно изменить с помощью fn $ x? Где я могу найти документацию? (Мои поиски не дали удовлетворительных результатов). Заранее спасибо за указатели. – sigmabeta