如何根据闪亮的输入更改图形类型?
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
我正在尝试构建一个闪亮的应用程序,它根据使用 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