通过带引号的selectInput进行绘图的选项

时间:2019-05-09 15:00:38

标签: r ggplot2 shiny

我正在尝试生成一个ggplot,它通过selectInput来选择其中的引号,以选择“ position”变量。

我尝试使用paste0或“和”的不同组合,很幸运。

在ui.R端:

selectInput("posicion","Visualizar Barras",
     list ("Agrupadas"= 'position_dodge2(preserve = "single")',
       "Sumadas"="stack")))

在服务器R端:

output$g_virus_x_semana.1 <- renderPlot({
      ggplot(subset(v,  v$año==input$año.1 & Virus %in% input$virus), aes(semana, fill=Virus))+
        geom_bar(position = input$posicion, stat = "count")+
        scale_x_discrete(drop=FALSE)+
        scale_fill_virus()+theme_dark()+labs(y = "N° de virus identificados", x= "Semana")

如果我选择“ Agrupadas”,则会得到:Error in : Can't find `position` called "position_dodge2(preserve = "single")"

如果将position_dodge2(preserve = "single")直接放在ggplot代码部分,则就像魅力一样。

1 个答案:

答案 0 :(得分:1)

一种选择是基于input$posicion来创建反应函数,以更改添加到绘图中的图层。

您的selectInput()看起来像

selectInput(inputId = "posicion", label = "Visualizar barras",
                                    choices = list("Agrupadas",
                                                   "Sumadas") )

然后在server中,您可以根据所做的选择添加有关要添加到绘图中的图层的信息。请注意,整个图层都存储在列表中,以添加到绘图中。

server = function(input, output) {

    bartype = reactive({
        if(input$posicion == "Agrupadas") {                     
            list( geom_bar(position = position_dodge(preserve = "single"), stat = "count") )
            }
        else {
            list( geom_bar(position = "stack", stat = "count") )
        }
    })

    # Create scatterplot object the plotOutput function is expecting
    output$lineplot = renderPlot({
        ggplot(mtcars, aes(factor(gear), fill = factor(cyl) ) ) +
            bartype()
    })

}