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

时间:2018-10-17 14:26:33

标签: r shiny

我希望用户选择是否要在图形上看到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 reactive Geom lines

我想它应该像这样:

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')
}

2 个答案:

答案 0 :(得分:2)

您可以将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 package(v0.2.1)于2018-10-17创建

答案 1 :(得分:0)

您能否同时绘制两个图,然后使用复选框作为确定输出内容的条件?

default_margin