具有多维数据集的交互式渲染图图

时间:2018-04-15 14:45:23

标签: r shiny shinydashboard

我正在尝试运行一个互动的rshiny情节。我有这个输出: shiny output in browser

我希望能够按国家,按情景,按变量,按年(4个选项)进行子集和绘图。我也希望能够按年增加价值点,而不是立即按年完成整个情节 我只能按国家/地区进行分组。我的场景和可变下拉列表不是被动的。并且它绘制了所有场景的所有变量,尽管我想要一个场景和一个国家的一个变量图

如何让我的图表互动?

library(reshape2)
library(lattice)
library(plyr)
library(shiny)
library(dplyr)
library(abind)
library(ggplot2)

 ui <- fluidPage(
  titlePanel("Comparing Trend and PP policies by MDGs and funding"),  
  sidebarLayout(
    sidebarPanel(
      radioButtons("radio", label = h3("Country"),choices=unique(dmiubf$country), selected = ""),
      selectInput("Senario","Show senario:", choices = unique(dmiubf$scn)),
      selectInput("var","Show senario:", choices = unique(dmiubf$var)),
      selectInput("year","Show vertical line in year(s):", choices = unique(dmiubf$year),multiple=TRUE)
    ),
    mainPanel(
      plotOutput("chart")
    )
  )
)

server <- function(input, output) {
  cr <- reactive({
    a = dmiubf[dmiubf$var==input$var, dmiubf$scn==input$senario]<-dmiubf[dmiubf[,"country"]=="Costa Rica",input$senario]<-"base"
    dmiubf
  })

  output$chart <- renderPlot({
    req(input$radio)
    if (input$radio==c("Costa Rica")) {
      plot0<-ggplot(data=cr()) + geom_point(aes(x=year,y=pcn, fill=scn),
                                            size = 6)
      print(plot0)
      }
  })
}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

我尝试修复你的应用,但不知道输入数据是怎么样的,有点难。所以我创建了一个随机的虚拟数据集。因此,它并不总是显示图,因为在过滤过程之后没有数据。

但作为一个起点,我认为这应该对你有帮助:

library(shiny)
library(dplyr)
library(ggplot2)

dmiubf <- data.frame(
  country=c(rep("Costa Rica",8), rep("England",8), rep("Austria",8), rep("Latvia",8)),
  scn = rep(c("base","high","low","extra"),8),
  year = sample(c(1998, 1999, 2000, 2001), 32, replace = T),
  var = sample(c(1,2,3,4), 32, replace = T),
  pcn = sample(c(10,20,30,40), 32, replace = T)
)

ui <- fluidPage(
  titlePanel("Comparing Trend and PP policies by MDGs and funding"),  
  sidebarLayout(
    sidebarPanel(
      radioButtons("radio", label = h3("Country"),choices= as.character(unique(dmiubf$country)), selected = ""),
      selectInput("Senario","Show senario:", choices = as.character(unique(dmiubf$scn))),
      selectInput("var","Show senario:", choices = sort(unique(dmiubf$var))),
      selectInput("year","Show vertical line in year(s):", choices = sort(unique(dmiubf$year)), multiple=TRUE)
    ),
    mainPanel(
      plotOutput("chart")
    )
  )
)

server <- function(input, output) {
  cr <- reactive({
    a <- dmiubf[as.character(dmiubf$country)==input$radio & 
                  dmiubf$var %in% as.numeric(input$var) & 
                  dmiubf$year %in% as.numeric(input$year) & 
                  as.character(dmiubf$scn)==input$Senario
                ,]
    a
  })

  output$chart <- renderPlot({
    validate(
      need(nrow(cr())!=0, "No Data to plot")
    )
    ggplot(data=cr()) + geom_point(aes(x=year, y=pcn, fill=scn), size = 6)
  })
}

shinyApp(ui = ui, server = server)