从Shiny中的数据框动态更改绘图轴值

时间:2017-01-15 14:24:54

标签: r dataframe shiny rstudio

我在项目中使用Rstudio和Shiny。

我定义了一个变量res,它包含多行和多列的数据框,然后我创建一个图,其x y和color是来自res数据帧的数据。 我的问题是,当我运行它,如果我写,我希望x轴输入变量值(input$SelInp),我不会得到数据帧值,而是,我只得到列名。

如果我更改代码以直接从dataframe(res$some_column_name)获取值,我会得到正确的值。

ui.R

selectInput("SelInp",
                         label = "Choose one:",
                         choices = colnames(res)
                         )

server.R

  output$plt = renderPlot({
                  qplot(data = res,
                     x = input$SelInp, #this only returns a column name 
                     y = res$loan_amnt, # this returns correct values from column loan_amt
                     ylab = "some y axis",
                     xlab = "some x axis",
                     main="Our Chart")
                     }
                     )

所以,我希望提前感谢input$SelInp中的值

1 个答案:

答案 0 :(得分:3)

我认为原因是selectInput将列名作为字符返回。 qplot期待一个变量。我没有检查qplot是否有一个选项来使用字符来指定比例,但是ggplot中的aes_string会这样做:

ui.R

library(shiny)
library(ggplot2)

shinyUI(fluidPage(
  titlePanel("Old Faithful Geyser Data"),
  sidebarLayout(sidebarPanel(
    selectInput(
      "selectedCol",
      "Select colum for X axis",
      choices = colnames(mtcars),
      selected = colnames(mtcars)[1]
    )
  ),
  mainPanel(plotOutput("distPlot")))
))

server.R

library(shiny)
library(ggplot2)

shinyServer(function(input, output) {
  output$distPlot <- renderPlot({
    x_axis <- input$selectedCol
    gg <-
      ggplot(mtcars, aes_string(x = x_axis, y = "hp", color = "cyl"))
    gg <- gg + geom_point()
    gg
  })
})

如果有帮助,请告诉我。