是否可以有闪亮的动态图表类型? (输出类型根据输入而变化)

Posted

技术标签:

【中文标题】是否可以有闪亮的动态图表类型? (输出类型根据输入而变化)【英文标题】:Is it possible to have a dynamic chart type in shiny? (Type of output changes based on input) 【发布时间】:2021-12-24 02:09:44 【问题描述】:

我希望图表出现在相同的位置 在用户界面中,但图表输出的类型取决于用户选择的内容。该示例不起作用,但可以解释我在寻找什么。

简单示例

library(shiny)

# Define UI 
ui <- fluidPage(

    # Application title
    titlePanel("Title"),

    # Sidebar 
    sidebarLayout(
        sidebarPanel(
            selectInput("time", "Select time frame", choices = c("Hour", "Minute", "Day", "Month"), selected = "Day")
        ),

        # Show a plot of the generated distribution
        mainPanel(
           uiOutput("plot")
        )
    )
)

# Define server 
server <- function(input, output) 
    output$plot = renderUI(
        if(input$time %in% c("Hour", "Minute"))
            renderPlot(mtcars %>% ggplot(aes(disp, mpg )) + geom_point())
        
        else if(input$time %in% c("Day", "Month"))
            renderPlotly(mtcars %>% ggplot(aes(disp, mpg )) + geom_point())
        
    )
   


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

如果有可能,请告诉我

【问题讨论】:

【参考方案1】:

我认为这已经足够了。您可以让 renderUI 有条件地切换 plotOutput 以便它显示在同一区域中。使用您的大部分代码,我将 if 语句更改为具有绘图/绘图输出而不是渲染绘图/绘图。然后我为这些新地块中的每一个都有一个单独的渲染图/绘图输出,我将其标记为 plot1/2

library(shiny)
library(ggplot2)
library(plotly)

# Define UI 
ui <- fluidPage(
  
  # Application title
  titlePanel("Title"),
  
  # Sidebar 
  sidebarLayout(
    sidebarPanel(
      selectInput("time", "Select time frame", choices = c("Hour", "Minute", "Day", "Month"), selected = "Day")
    ),
    
    # Show a plot of the generated distribution
    mainPanel(
      uiOutput("plot")
    )
  )
)

# Define server 
server <- function(input, output) 
  
  output$plot = renderUI(
    if(input$time %in% c("Hour", "Minute"))
        plotOutput("plot1")
     else if(input$time %in% c("Day", "Month"))
        plotlyOutput("plot2")
    
  )
  
  output$plot1<-renderPlot(
    mtcars %>% ggplot(aes(disp, mpg )) + geom_point()
  )
  
  output$plot2<-renderPlotly(
    mtcars %>% ggplot(aes(disp, mpg )) + geom_point()
  )
  


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

我希望这有效!祝你好运!

【讨论】:

效果很好!谢谢!

以上是关于是否可以有闪亮的动态图表类型? (输出类型根据输入而变化)的主要内容,如果未能解决你的问题,请参考以下文章

根据窗口大小动态调整闪亮绘图输出的高度和/或宽度

R 闪亮并巧妙地获得图例点击事件

Mybatis总结

在我闪亮的应用服务器部分制作 if 语句

闪亮:renderPrint() 根据 input$id_cell_clicked 显示存储在表中的附加信息

零基础学Python动态类型注释输入与输出