繁体   English   中英

如何使用条件将数据添加到ggplot中,使其具有交互性?

[英]How can I use conditions to add data to a ggplot making it interactive?

这是我关于stackoverflow的第一个问题,所以如果我的问题没有得到完美描述,请原谅我。 我正在使用R闪亮的互动情节。 目的是比较不同城市的空气质量数据。 这应该在ggplot中完成,其中用户可以选择污染物(y轴)和可能的相关因子(例如空气温度,x轴)。 然后,用户应该能够选择应该绘制数据的所有城市(如CheckboxGroupInput)。 选择两个变量(x- / y轴)可以很好地工作,但是我很难同时绘制几个城市。

我已经创建了输入,看起来效果很好。 我也可以一次绘制一个城市。 我还设法绘制了几个选定的城市,但它们没有绘制在同一个ggplot中,但只有最顶部的图可见(参见下面的简化代码)。

用户界面:

library(shiny)
library(ggplot2)

berlin_d <- read.csv("berlin_d.csv")
london_d <- read.csv("London_d.csv")
warsaw_d <- read.csv("Warsaw_d.csv")


checkboxGroupInput(
          inputId = "city",
          label = "select a city/multiple cities",
          choices = c(
            "Berlin" = "Berlin",
            "London" = "London",
            "Warsaw" = "Warsaw"
          )
        ),

      selectInput(
        inputId = "box1",
        label = "select a variable to plot (x-axis)",
        choices = c("temperature" = "temp", 
          "month" = "month",
          "weekday" = "weekday"
        ),
        selected = "temp"
      ),


    selectInput(
      inputId = "box2",
      label = "select a pollutant to plot (y-axis)",
      choices = c("Ozone" = "O3",
                  "NO2" = "NO2",
                  "PM10" = "PM10"
      ),
    )

服务器:

output$plot <- renderPlot(ggplot()+
geom_point(if (input$city=="Berlin") {aes(berlin_d[[input$box1]], berlin_d[[input$box2]])})+
geom_point(if (input$city=="London") {aes(london_d[[input$box1]], london_d[[input$box2]])})+
geom_point(if (input$city=="Warsaw") {aes(warsaw_d[[input$box1]], warsaw_d[[input$box2]])})
)

我不明白为什么数据不会显示在同一个图中。 有没有办法在一个ggplot中绘制数据并仍然可以选择城市?

任何帮助表示赞赏!

要回答您的问题,您的代码中的一个小变化应该足以创建您正在寻找的功能。

你必须查看输入$ city的输出。 如果检查多个框,则向量长度会更改,然后在检查if子句时将仅使用第一个元素。 为避免这种情况,您可以按如下方式重写if子句

if ("Berlin" %in% input$city)

整个情节看起来像这样。

ggplot() +
    geom_point(if ("Berlin" %in% input$city) {aes(berlin_d[[input$box1]], berlin_d[[input$box2]])}) +
    geom_point(if ("London" %in% input$city) {aes(london_d[[input$box1]], london_d[[input$box2]])}) +
    geom_point(if ("Warsaw" %in% input$city) {aes(warsaw_d[[input$box1]], warsaw_d[[input$box2]])})

但是,更好的方法是创建一个包含所有数据的数据集,其中city只是一个分组变量。 然后创建一个反应式表达式,根据输入过滤器(输入$ city)将数据子集化为闪亮。 然后,您可以创建一个绘图,其中一次调用ggplot并将city设置为颜色的因子变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM