闪亮的反应图在同一数据集中绘制多个条件

时间:2016-12-11 00:39:24

标签: r ggplot2 shiny

我遇到了服务器问题.R根据ui.R中的下拉选项来绘制数据。我想选择一个'Site'和'Parameter'并绘制反映'Site'和'Parameter'的'Obs'。 Ob为X上的Y和Date。这是一些示例代码。

Site_Names=data.frame(c(A=rep("A",10),B=rep("B",10),C=rep("C",10)))
Site_Names=Site_Names[,1]
Parameters=data.frame(c(pH=rep("pH",10),DO=rep("DO",10),Temp=rep("Temp",10)))
Parameters=Parameters[,1]
Obs=rnorm(30)
Dates=c(seq(as.Date("2000/1/1"), by = "year", length.out =10 ),
seq(as.Date("2005/1/1"), by = "year", length.out =10 ),
seq(as.Date("1990/1/1"), by = "year", length.out =10 ))

data=data.frame(Site_Names,Parameters,Obs,Dates)

#ui.R

Sites=levels(data$Site_Name)
setNames(as.list(Sites), Sites)
params=levels(data$Parameters)
setNames(as.list(params), params)

library(shiny)
library(ggplot2)

shinyUI(fluidPage(

 # Application title
  titlePanel("Data"),

  sidebarLayout(
   sidebarPanel(
    selectInput("site", "Select Site:", Sites),
      selectInput("parameters", "parameter", params)

    ),

# Show a plot of the generated distribution
mainPanel(
  plotOutput("Plot")
  )
 )
  ))

#server.R

library(shiny)
library(ggplot2)
shinyServer(function(input, output) {

  dataset <- reactive({
    data[ , (input$Sites),]
  })

  output$distPlot <- renderPlot({

      p <- ggplot(dataset(), aes(x=Dates, y=input$params and input$Sites))
      + geom_point(data$Obs)
      print(p)

      })

1 个答案:

答案 0 :(得分:2)

您可以在反应表达式中使用subset来获取绘图数据。但请注意,如果参数未包含在网站数据中,您最终可能会得到空值。

library(shiny)
library(ggplot2)
shinyServer(function(input, output) {

  dataset <- reactive({
    subset(data, Site_Names == input$Sites & Parameters == input$params)
  })

  output$distPlot <- renderPlot({

      p <- ggplot(dataset(), aes(x = Dates, y = Obs)) + 
           geom_line()

      print(p)

      })