Rshiny:使用来自反应函数的数据进行反应绘图

时间:2018-01-15 10:12:02

标签: r ggplot2 shiny

我正在使用flexdashboard在Rmarkdown文件中制作一个闪亮的应用程序,而且我无法使用来自反应函数的数据制作ggplot。

这些是步骤/元素:

  1. 从radiobuttons获取输入请求日期,并打印答案 (检查他是否反应良好) - >原理
  2. 读取相关csv文件的反应函数(基于日期) 并打印它的内容(检查) - >原理
  3. 使用csv文件的内容制作的ggplot - >不起作用
  4. 当我使用renderPlot()制作带有非反应数据集的ggplot(我加载了一个)时,我得到了正确的结果,所以ggplot-part很好。

    它与反应性en renderPlot组合有关,但我似乎无法弄明白。虽然它是一个简单的"虽然观看了几部电影并阅读了几本指南,但我仍然难以掌握工作流程。

    这是我目前的代码:

    ---
    title: "Tests plot" 
    output: 
      flexdashboard::flex_dashboard:
        orientation: columns
        vertical_layout: fill
    runtime: shiny
    ---
    
    ```{r setup, include=FALSE}
    library(flexdashboard)
    library(shiny)
    library(ggplot2)
    ```
    
    Input {.sidebar}
    ======================================
    ```{r}
    radioButtons("countdate",h3("Datum"), c("01-12-2017"="T1","06-12-2017"="T2","24-12-2017"="T3"))
    ```
    
    Data
    ======================================
    Column
    -----------------------------------------------------------------------
    ### Date
    ```{r}
    reactive({ #OK
      input$countdate
    })
    ```
    
    Column
    -----------------------------------------------------------------------
    ### Data
    ```{r}
    fake2 <- reactive({read.csv2(paste(input$countdate, ".csv", sep = ""))})
    fake2 #OK
    ```
    
    Column
    -----------------------------------------------------------------------
    ### Plot
    ```{r}
    ggplot1 <- reactive({
      renderPlot({ggplot(fake2, aes(Rij, Plant)) +
          xlim(0,40) +
          ylim(0,50) +
          coord_equal() +
          geom_raster(aes(fill=Wtot)) +
          scale_fill_gradient(low="yellow", high="red")
        })
    })
    
    ggplot1
    ```
    

    我也在情节部分尝试了这个:

    renderPlot({
     ggplot(fake2, aes(Rij, Plant)) +
      xlim(0,40) +
      ylim(0,50) +
      coord_equal() +
      geom_raster(aes(fill=Wtot)) +
      scale_fill_gradient(low="yellow", high="red")
    })
    

    我的数据如下:

    Vplaat;Rij;Plant;Mtot;Wtot
    A;4;10;2;20
    B;4;46;5;35
    C;9;5;1;14
    D;9;30;0;42
    E;11;17;8;85
    ...
    

1 个答案:

答案 0 :(得分:1)

我得到了一位名叫弗洛里安的开发人员的回答,但不幸的是他删除了他的评论。

他告诉我在处理被动内容时我需要使用x()而不是x,在我的情况下:ggplot(fake2()...而不是ggplot(fake2...

这一开始没有用,但让我走上正轨!

最重要的是,我还必须删除renderPlot函数周围的reactive({}),然后才能工作。

谢谢你的帮助弗洛里安!

新代码:

renderPlot({
 ggplot(fake2(), aes(Rij, Plant)) +
  xlim(0,40) + #rijen
  ylim(0,50) + #planten
  coord_equal() +
  geom_raster(aes(fill=Wtot)) +
  scale_fill_gradient(low="yellow", high="red")
})