[英]How to switch between geom_line and geom_bar visualization in ggplot2 in Shiny - R
我希望用户选择是否要在图表上看到geom_line
或geom_bar
。
使用checkboxGroupInput
最好的方法是什么?
假设我有这个带有geom_line
情节:
ggplot(regiao, aes(x=Ano,fill=Regiao, color=Regiao))+
geom_line(stat='count')
而这个带有geom_bar
:
ggplot(regiao, aes(x=Ano,fill=Regiao, color=Regiao))+
geom_bar()+
stat_count()
我想知道如何被动地设置 ggplot 的参数。
我到处搜索,但只能找到值的反应函数,而不是参数,就像这样: ggplot2 with反应几何线
我想它应该是这样的:
ggplot(regiao, aes(x=Ano,fill=Regiao,color=Regiao))+
if (input$checkbox == "bars") {
+ geom_bar()+
stat_count()
}
if (input$checkbox=="lines") {
+geom_line(stat='count')
}
您可以将ggplot
对象保存到变量中,然后根据需要在其上构建。 在 Shiny 上下文之外,您可以通过引用变量或将添加到ggplot
的任务封装在函数中来完成此操作。 在 Shiny 上下文中,您可以根据用户输入决定向对象添加什么。
例如,在普通的 R 上下文中:
library(ggplot2)
set.seed(123)
df <- data.frame(
month = 1:10,
value = runif(10)
)
创建基础ggplot
对象。 例如,我还指定了 y 比例,因为ggplot
元素(如 geoms 和 scales)不必以任何顺序添加。 您可能有一些规范,例如无论几何类型如何都保持不变的比例。
plot_base <- ggplot(df, aes(x = month, y = value)) +
scale_y_continuous(labels = scales::percent)
然后根据什么类型的绘图添加一个几何图形。 在 Shiny 应用程序中,这将改为input$plot_type
,并采用一对单选按钮或其他一些输入的值。 该决策将在您的渲染函数中进行,例如renderPlot
。
plot_type <- "Line"
if(plot_type == "Line") {
p <- plot_base +
geom_line()
} else {
p <- plot_base +
geom_col()
}
p
相同的逻辑适用于条形/列。 您只是不必再次运行 if/else — 当用户更改输入时,它会重新运行。
plot_type <- "Bar"
if(plot_type == "Line") {
p <- plot_base +
geom_line()
} else {
p <- plot_base +
geom_col()
}
p
由reprex 包(v0.2.1) 于 2018 年 10 月 17 日创建
您能否制作两个图,然后使用复选框作为条件来确定输出内容?
output$myPlot <- renderPlot(ifelse(input$checkbox == "bars", myBarPlot, myLinePlot))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.