R Shiny - вращающаяся вкладка панели и функция onclick

Я использую networkD3 и блестящий, чтобы визуализировать некоторые данные. У меня есть диагональная сеть, созданная сетью D3. Однако я хочу, чтобы дерево отображалось вертикально. Кажется, что у networkD3 нет возможности вращать diagonalNetworks.

Можно ли повернуть вкладку в блестящем?

Я добавил код ниже. Если возможно, я бы хотел иметь возможность вращать диаграмму, указанную функцией diagonalNetwork(). Если нет, могу ли я повернуть всю вкладку?

Я заметил, что в сети NetworkD3 forcenetwork есть опция onclick. Можно ли реагировать на щелчки узлов одинаково с помощью diagonalNetwork?

Спасибо!

#### Load necessary packages and data ####
library(shiny)
library(networkD3)

data(MisLinks)
data(MisNodes)

hc <- hclust(dist(USArrests), "ave")
URL <- paste0(
  "https://cdn.rawgit.com/christophergandrud/networkD3/",
  "master/JSONdata//flare.json")



## Convert to list format
Flare <- jsonlite::fromJSON(URL, simplifyDataFrame = FALSE)


#### Server ####
server <- function(input, output) {

  output$simple <- renderDiagonalNetwork({
    diagonalNetwork(List = Flare, fontSize = 10, opacity = 0.9)
  })  
  

  output$force <- renderForceNetwork({
    forceNetwork(Links = MisLinks, Nodes = MisNodes, Source = "source",
                 Target = "target", Value = "value", NodeID = "name",
                 Group = "group", opacity = input$opacity)
    
    
  })
  
  ## 
  #dendroNetwork(hc, height = 600)
 # 
#  dendroNetwork(hc, height = 500, width = 800, fontSize = 10,
#                linkColour = "#ccc", nodeColour = "#fff", nodeStroke = "steelblue",
#                textColour = "#111", textOpacity = 0.9, textRotate = NULL,
#                opacity = 0.9, margins = NULL, linkType = c("elbow", "diagonal"),
#                treeOrientation = c("horizontal", "vertical"), zoom = FALSE)
  
  

}

#### UI ####

ui <- shinyUI(fluidPage(

  titlePanel("Shiny networkD3 "),

  sidebarLayout(
    sidebarPanel(
      sliderInput("opacity", "Opacity (not for Sankey)", 0.6, min = 0.1,
                    max = 1, step = .1)
    ),
    mainPanel(
      tabsetPanel(
        tabPanel("Simple Network", diagonalNetworkOutput("simple")),
        tabPanel("Force Network", forceNetworkOutput("force"))
      )
    )
  )
))

#### Run ####
shinyApp(ui = ui, server = server)

2 ответа

Решение

Добавьте это на свой сервер.R

Примечание: идентификатор вашего div, содержащего сеть simple,

  observe({
    runjs("
          var rotated = false;
          var div = document.getElementById('simple');

          deg = rotated ? 0 : 90

          div.style.webkitTransform = 'rotate('+deg+'deg)'; 
          div.style.mozTransform    = 'rotate('+deg+'deg)'; 
          div.style.msTransform     = 'rotate('+deg+'deg)'; 
          div.style.oTransform      = 'rotate('+deg+'deg)'; 
          div.style.transform       = 'rotate('+deg+'deg)';

          rotated = !rotated;
          div.style.position = 'absolute';
          div.style.width = 1200+'px';
          div.style.height = 1200+'px';
    ")
  })

В вашем ui.R вы должны включить useShinyjs() и не забудьте загрузить пакет shinyjs, Информация о вращении в JS может быть найдена здесь: Поверните div, используя javascript

В текущей версии Dev networkD3 (v0.4.9000 @ 2017.08.30), есть новый treeNetwork() функция, которая имеет эту и многие другие новые функции, встроенные (они также складные).

Вы можете установить текущую версию Dev с...

devtools::install_github("christophergandrud/networkD3")

и построить вертикальный (расширяющийся вниз) диагональный график с...

library(networkD3)
library(jsonlite)

URL <- paste0("https://cdn.rawgit.com/christophergandrud/networkD3/",
              "master/JSONdata//flare.json")
Flare <- jsonlite::fromJSON(URL, simplifyDataFrame = FALSE)

treeNetwork(Flare, type = "tidy", direction = "down")

Есть еще много ошибок, которые нужно устранить, например, размещение и поворот текстовых меток, поэтому мы будем благодарны за тестирование, заполнение отчетов о проблемах / ошибках и / или запросы на извлечение. https://github.com/christophergandrud/networkD3

Другие вопросы по тегам