forceNetworkグラフを表示するShinyアプリケーションを構築しているときに、ネットワークは中央に留まらず、インタラクティブに不透明度を変更すると視界から外れます。forceNetwork {networkD3}をShinyアプリケーションの中心に保つにはどうすればいいですか?
私の質問は、この動作をどのように変更して、最初はネットワークをきれいに中央に保つかです。
再現性の例:
ui.R:
library(shiny)
library(networkD3)
shinyUI(fluidPage(
titlePanel("ForceNetD3"),
sidebarLayout(
sidebarPanel(
sliderInput("opacity",
"Opacity",
min = 0.1,
max = 1,
value = 0.4)
),
mainPanel(
forceNetworkOutput(outputId = "net")
)
)))
server.R:
library(shiny)
library(networkD3)
shinyServer(function(input, output) {
# Load data
data(MisLinks)
data(MisNodes)
output$net <- renderForceNetwork(forceNetwork(
Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Group = "group", opacity = input$opacity))
})
写真の中の行動:
解決策が機能します。提案できる他のソリューションはありますか?そして、デフォルトの動作が望ましくないことに同意しますか? – Jim
理論的には、評価される他のforceNetwork引数の1つにJavaScriptコマンドを挿入できます。 shinyに入力が変更されたときにJavaScriptコードを評価/実行する方法があれば、おそらく同様に動作します。私はデフォルトの動作が間違っているとは言いませんが、この目的に留意して設計されたものではありません。気にするなら、https://github.com/christophergandrud/networkD3/issuesで新しい問題を開くことができ、最終的にはそれに到達するかもしれません。 –
これで、 'input $ opacity'が変わるたびに、グラフは左上隅から中央に"投げられ "ます。あなたの' colourScale' -JS'ハックを使ってルートノードを保持する方法がありますか(または任意のノード) – Jim