2016-04-27 8 views
1

パッケージのforceNetwork()機能を使用して外部のWebサイトへのリンクとしてノードを使用する方法はrですか?私はおそらくclickActionを変更すると思っていた?clickAction = NULLを使用してネットワークD3のノードをリンクする

例データ:

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) 

望ましい結果:ユーザーがノードをクリックすると、新しいタブがノードに関連付けられたURLを指す(例えばwindow.open)をオープンします - どのように私はポイントに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

@ timelyportfolioあなたの答えはnetworkD3での私の仕事に非常に役立ちます。また、jsHooksなどの 'fn $ x'を使ってできる他のすべてのオプションのドキュメントやリファレンスを教えてください。私は負債になります。 – sigmabeta

+0

特に気になるものはありますか?一般に、 'htmlwidgets :: onRender'は、JavaScriptを使ってポストレンダーを操作するための第一の選択肢です。上記の場合、Rからの追加データが必要なので、 'onRender'で十分ではありません。 'htmlwidget'は' list'であるため、作成後に変更することができます。 – timelyportfolio

+0

私はこの[link](http://www.coppelia.io/2014/07/an-a-to-z-of-extra-features-for-the-d3-force-layout/)を見ていました。たとえば、ノードやリンクのプロパティにいくつかの追加機能を追加することができます。 そして、Rstudioのfnのすべてのオプションを表示すると、fn $ jsHooksが表示されます。私はおそらく、これらのjsHooksにいくつかのカスタムjavascriptを書く方法があると考えていました。 また、fn $ xを使って変更できるすべてのものは何ですか?それについてのドキュメントはどこにありますか? (私の検索では満足な結果が得られませんでした)。ポインタのために事前に感謝します。 – sigmabeta

関連する問題