如何根据闪亮的输入更改图形类型?

How to change the type of graph based off a shiny input?

我正在尝试构建一个闪亮的应用程序,它根据使用 selects 的输入更改 plot/graph 类型。

我有两个使用相同数据集制作的图表。一个是条形图,一个是饼图。

我有一个输入,用户可以 select 他们想要查看哪种类型的图表。但我的问题是我无法弄清楚如何根据输入更改图表。这是我正在使用的屏幕截图。

我想要的输出是当用户 select 使用饼图图标时将此更改为饼图。像下面一样

我只是不知道如何将 UI 中的 inputId 连接到应用程序的服务器端。

这是我的代码

#APP
ui <-dashboardPage(
  dashboardHeader(title = "ShinyWidget Plot Change"),
  dashboardSidebar(),
  dashboardBody(
   fluidRow(
    box(plotOutput("plot1", height = 250)),
    box(checkboxGroupButtons(
      inputId = "change_plot",
      label = "Visualize:", 
      choices = c(`<i class='fa fa-bar-chart'></i>` = "bar", 
                  `<i class='fa fa-pie-chart'></i>` = "pie"),
      justified = TRUE)
        )
      )
    )
  )
)




server <- function(input, output) { 


  

  
output$plot1 <- renderPlot({ 
  ggplot(data,aes(Country, Count)) + 
  geom_bar(stat = "identity")
})
  
}
shinyApp(ui, server)

#graphs
barplot <- ggplot(data,aes(Country, Count)) + 
  geom_bar(stat = "identity")

piechart <- ggplot(data,aes(x="", y=Count, fill=Country)) + 
  geom_bar(stat = "identity", width = 1) + 
  coord_polar("y", start=0)

您可以像这样通过 if ... else ... 条件实现您想要的结果。此外,由于您的按钮应切换绘图类型,因此我切换为 radioGroupButtons:

使用一些基于 mtcars:

的虚假示例数据
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(ggplot2)
library(dplyr)

data <- mtcars %>% 
  count(cyl) %>%
  mutate(cyl = factor(cyl)) %>% 
  rename(Country = cyl, Count = n)

# APP
ui <- dashboardPage(
  dashboardHeader(title = "ShinyWidget Plot Change"),
  dashboardSidebar(),
  dashboardBody(
    fluidRow(
      box(plotOutput("plot1", height = 250)),
      box(radioGroupButtons(
        inputId = "change_plot",
        label = "Visualize:",
        choices = c(
          `<i class='fa fa-bar-chart'></i>` = "bar",
          `<i class='fa fa-pie-chart'></i>` = "pie"
        ),
        justified = TRUE,
        selected = "bar"
      ))
    )
  )
)

server <- function(input, output) {
  output$plot1 <- renderPlot({
    if (input$change_plot %in% "bar") {
      ggplot(data, aes(Country, Count, fill = Country)) +
        geom_bar(stat = "identity")
    } else {
      ggplot(data, aes(x = "", y = Count, fill = Country)) +
        geom_bar(stat = "identity", width = 1) +
        coord_polar("y", start = 0)
    }
  })
}
shinyApp(ui, server)
#> 
#> Listening on http://127.0.0.1:3370