【问题标题】:R Shiny: Linking ggplot to slider bar per yearR Shiny:每年将 ggplot 链接到滑块
【发布时间】:2017-09-06 09:18:33
【问题描述】:

我已经成功地为这一年添加了一个滑块并创建了一个 ggplot。但是,我很难弄清楚如何按年过滤数据(目前它一次显示每年一次),如滑块所示。

如何获取数据:

library(WDI)
xdat <- WDI(indicator=c('NY.GNP.PCAP.CD', 'SH.DYN.MORT', 'SP.POP.TOTL', 'SP.DYN.LE00.IN', 'SP.DYN.TFRT.IN'), start=1960, end=2014, extra=TRUE)
sdata <- subset(xdat, xdata$region != "Aggregates")
sdata <- na.omit(sdata)

sdata$reg <- ifelse(sdata$region == "Europe & Central Asia (all income levels)", 1, ifelse(sdata$region == "Middle East & North Africa (all income levels)", 2, ifelse(sdata$region == "South Asia", 3, ifelse(sdata$region=="Latin America & Caribbean (all income levels)", 4, ifelse(sdata$region=="Sub-Saharan Africa (all income levels)", 5, ifelse(sdata$region=="East Asia & Pacific (all income levels)", 6, ifelse(sdata$region=="North America", 7, 0)))))))

sdata$col <- ifelse(sdata$reg == 1, "#FFFFFF", ifelse(sdata$reg == 2, "yellow", ifelse(sdata$reg == 3, "red", ifelse(sdata$reg== 4, "green", ifelse(sdata$reg== 5, "orange", ifelse(sdata$reg==6, "lavender", ifelse(sdata$reg== 7, "pink", 0)))))))

ui.r

library(googleCharts)


shinyUI(fluidPage(
  plotOutput("view"),
  titlePanel("title panel"),
  column(
         sliderInput("slider1", label=h3("Slider"),
                     min=1960, max=2014, value=50, sep="", animate=TRUE),
         ),
  fluidRow(
    column(
           radioButtons("radio", label=h3("Radio buttons"),
                        choices = list("Mortality" = 1, "Choice 2" = 2, "Choice 3" = 3), selected=1)),
    sidebarLayout(
      sidebarPanel(""),
      mainPanel("Main")
    ))
))

服务器.r

library(dplyr)

shinyServer(function(input, output) {
  output$view <- renderPlot({
    ggplot(sdata, aes(x=NY.GNP.PCAP.CD, y = SP.DYN.LE00.IN)) +     geom_point(aes(size=pop^(0.75)/20000000+2, colour=col)) 
  })
})

问题是每年都会出现,当我使用滑块时,它什么也没做:

我还想知道如何使用单选按钮来更改变量。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    ui.r 对我不起作用(编辑:更改了一些标签)但我猜是这样的:

    ui.r

    library(googleCharts)
    
    shinyUI(fluidPage(
      plotOutput("view"),
      titlePanel("title panel"),
      column(4,
             sliderInput("slider1", label=h3("Slider"),
                     min=1960, max=2014, value=50, sep="", animate=TRUE)
         ),
     fluidRow(
      column(2,
           radioButtons("radio", label=h3("Radio buttons"),
                        choices = list("Mortality" = 1, "Choice 2" = 2, "Choice 3" = 3), selected=1)),
    sidebarLayout(
      sidebarPanel(""),
      mainPanel("Main")
      ))
    ))
    

    和服务器

    library(dplyr)
    
    shinyServer(function(input, output) {
      output$view <- renderPlot({
        temp = sdata[sdata$year>(input$slider1)&sdata$year<2014,]
        ggplot(temp, aes(x=NY.GNP.PCAP.CD, y = SP.DYN.LE00.IN)) + geom_point(aes(size=temp$SP.POP.TOTL^(0.75)/20000000+2, colour=col)) 
      })
    })
    

    【讨论】:

    • 现在应该可以了,我看到你只改变了开始输入,所以input$slider1 现在选择最小年份
    • 也许是我的 ui.r?
    • 我更改了一些列规格,因此 ui.r 现在可以为我工作。不确定geom_point 中的pop 指的是什么,是sdata$SP.POP.TOTL 吗?
    • 是的,它是针对那个变量的。
    • 如果你能把所有的事情都搞定(ui.r 和 server.r),那就是救命稻草。
    猜你喜欢
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2014-07-29
    • 2012-10-09
    相关资源
    最近更新 更多