闪亮:动态更改ggplot2中使用的列

时间:2016-07-18 08:15:37

标签: ggplot2 shiny

我尝试创建一个Shiny应用程序,您可以在其中选择ggplot每个' selectizeInput'的x轴。

我知道Gallery Example,通过预先选择所需的列来解决这个问题。因为在我的情况下,当我可以动态地更改x =中的aes()属性时,数据结构有点复杂。

为了更好地理解,我添加了一个最小的工作示例。不幸的是,ggplot使用输入作为值,而不是使用相应的列。

library(shiny)
library(ggplot2)


# Define UI for application that draws a histogram
ui <- shinyUI(fluidPage(

   # Application title
   titlePanel("Select x Axis"),       

   sidebarLayout(
      sidebarPanel(
        selectizeInput("xaxis", 
                       label = "x-Axis",
                       choices = c("carat", "depth", "table"))            
      ),          

      mainPanel(
         plotOutput("Plot")
      )
   )
))

server <- shinyServer(function(input, output) {

   output$Plot <- renderPlot({
     p <- ggplot(diamonds, aes(x = input$xaxis, y = price))
     p <-p + geom_point()
     print(p)
   })
})

# Run the application 
shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:4)

aes使用NSE(非标准评估)。这对于交互式使用非常有用,但对于编程来说却不是很好。出于这个原因,有两个SE(标准评估)替代方案,aes_(以前为aes_q)和aes_string。第一个是引用输入,第二个是字符串输入。在这种情况下,使用aes_string可以很容易地解决问题(因为selectizeInput无论如何都会给我们一个字符串。)

ggplot(diamonds, aes_string(x = input$xaxis, y = 'price')) +
  geom_point()