繁体   English   中英

如何在 Shiny-R 的 ggplot2 中的 geom_line 和 geom_bar 可视化之间切换

[英]How to switch between geom_line and geom_bar visualization in ggplot2 in Shiny - R

我希望用户选择是否要在图表上看到geom_linegeom_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM