【问题标题】:R Shiny - Rotating tabPanel & onclick functionR Shiny - 旋转 tabPanel 和 onclick 功能
【发布时间】:2017-05-08 15:23:35
【问题描述】:

我正在使用networkD3 和闪亮来可视化一些数据。我有一个由networkD3 创建的diagonalNetwork。但是,我希望树垂直显示。 networkD3 似乎没有旋转对角网络的选项。

我可以在shiny 中旋转tabPanel 吗?

我在下面添加了代码。如果可能的话,我希望能够旋转diagonalNetwork() 指定的图表。如果没有,我可以旋转整个tabPanel吗?

我注意到networkD3forceNetwork 有一个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)

【问题讨论】:

  • 如果您向reproducible example 提供示例输入数据,我们可以运行这些数据来测试可能的解决方案,这将更容易提供帮助。
  • 感谢您的回复,我已经添加代码了。
  • 我没有看到 forcenetwork 的点击事件。我看到了一个鼠标悬停和一个拖放事件,但我不确定这就是你的意思。无论如何,由于它与第一个问题不是很相关,我无论如何建议发表一个新帖子并更清楚地描述第二个问题的所需输出。关于第一个问题,请看下面的答案。

标签: r shiny htmlwidgets networkd3


【解决方案1】:

将此添加到您的服务器。R

注意:包含网络的 div 的 id 是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 中旋转的信息可以在这里找到:Rotate a div using javascript

【讨论】:

  • 谢谢!太好了,我想我需要学习更多的javascript!
【解决方案2】:

networkD3 (v0.4.9000 @ 2017.08.30) 的当前开发版本中,有一个新的 treeNetwork() 函数内置了这个和许多其他新功能(它们也是可折叠的)。

您可以使用...安装当前的开发版本

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

【讨论】:

  • 不,暂时没有,但我很乐意回答问题(在正确的地方,即不在其他问题的评论线程中),我会更高兴从与之合作的人那里获得帮助。
猜你喜欢
  • 2016-11-09
  • 2021-09-04
  • 1970-01-01
  • 2019-12-25
  • 2015-08-11
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多