ggplot2在Shiny

时间:2017-12-16 21:14:52

标签: r ggplot2 shiny

以下是我的代码,我无法通过Shiny来显示图表中的数据。它只显示列名,而不是数据。有什么建议吗?

数据只是在图表中连续显示,而不是正确绘制。我试过通过R Shiny备忘单中的例子,但没有运气。

budget_d <- tribble(~opdate, ~r.pd.bdgt, ~r.pt.bdgt, ~r.au.bdgt,
                    ymd("2018-05-31"), 81, 73, 65,
                    ymd("2018-06-11"), 86, 79, 69,
                    ymd("2018-06-30"), 89, 76, 67,
                    ymd("2018-07-21"), 82, 72, 65,
                    ymd("2018-08-01"), 81, 73, 63,
                    ymd("2018-08-08"), 83, 75, 67,
                    ymd("2018-11-17"), 84, 74, 66)

require(shiny)
require(tidyverse)
require(lubridate)


ui <- fluidPage(
    dateRangeInput(
                    inputId = "period",
                    label = "Choose a Period",
                    start = ymd("2018-04-01"),
                    end = ymd("2018-09-01"),
                    min =  ymd("2018-01-01"),
                    max = ymd("2018-12-31")
                   ),
    selectInput(
                    inputId = "elements",
                    label = "Select an Element",
                    choices = c("Pd Recovery" = "r.pd.bdgt",
                                "Pt Recovery" = "r.pt.bdgt",
                                "Au Recovery" = "r.au.bdgt")
    ),
    plotOutput(
        outputId = "hist"
    )
)



server <- function(input, output){
    output$hist <- renderPlot({
        ggplot(budget_d, aes(opdate, input$elements)) +
                    geom_point() +
                   xlim(input$period)
    })
}



shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

hereinput$elements是可变的,如果您想使用变量,则应使用aes_string而不是aes。示例数据的工作示例:

require(shiny)
require(tidyverse)
require(lubridate)
library(ggplot2)



ui <- fluidPage(
  selectInput(
    inputId = "elements",
    label = "Select an Element",
    choices = colnames(iris)
  ),
  plotOutput(
    outputId = "hist"
  )
)



server <- function(input, output){
  output$hist <- renderPlot({

    # This works.
    ggplot(iris, aes_string("Sepal.Length", input$elements)) +
      geom_point()

    # This does not work.
    # ggplot(iris, aes(Sepal.Length, input$elements)) +
    #   geom_point()
  })
}

shinyApp(ui,server)

希望这有帮助!