R 在Shining应用程序中插入动态图的问题

R 在Shining应用程序中插入动态图的问题,r,shiny,dygraphs,R,Shiny,Dygraphs,我几乎完成了一个应用程序的开发工作,可以浏览我的一篇论文中发布的数据,我想最好能添加一个dygraph,而不是一个常规的ggplot。因此我的问题…:) 这是我到目前为止的代码 编辑:多亏了Waldi在下面的评论,我稍微修改了我的代码,并在这里将其最小化,以方便处理过程 library(shiny) library(dygraphs) library(xts) library(tidyverse) library(openxlsx) Sys.setlocale("LC_TIME&qu

我几乎完成了一个应用程序的开发工作,可以浏览我的一篇论文中发布的数据,我想最好能添加一个
dygraph
,而不是一个常规的
ggplot
。因此我的问题…:)

这是我到目前为止的代码

编辑:多亏了Waldi在下面的评论,我稍微修改了我的代码,并在这里将其最小化,以方便处理过程

library(shiny)
library(dygraphs)
library(xts)
library(tidyverse)
library(openxlsx)

Sys.setlocale("LC_TIME", "C")

data <- read.xlsx("https://www.bloomassociation.org/wp-content/uploads/2020/08/data.xlsx", sheet = 1) %>%
  mutate(date = as.Date(date, origin = "1899-12-30"))

# Define UI for application that draws a histogram
ui <- fluidPage(# Define filters 
                fluidRow(
                  
                  column(4,
                         selectInput("variableInput", label = h4("Show fisheries by:"), 
                                     unique(data$variable))),
                  column(4,
                         selectInput("unitInput", label = h4("Display data as:"), 
                                     unique(data$unit))),
                  column(4,
                         sliderInput("dateInput", label = h4("Select time range:"),
                                     min = as.Date("2000-01-01"), 
                                     max = as.Date("2017-12-31"), 
                                     value = c(as.Date("2000-01-01"), as.Date("2017-12-31")), 
                                     timeFormat = "%b %Y")
                  ),
                  # Display results
                  tabsetPanel(
                    tabPanel("Graphical view", withSpinner(dygraphOutput("distPlot"), type = getOption("spinner.type", default = 5), color = getOption("spinner.color", default = "#0A1D27"), size = getOption("spinner.size", default = 0.5))))
                ))

# Define server logic required to draw a histogram
server <- function(input, output) {
  
  filtered_xts <- reactive({
    data_ <- data %>%
      filter(variable == input$variableInput,
             unit == input$unitInput,
             date >= input$dateInput[1],
             date <= input$dateInput[2]
      ) %>%
      select(-c(4:5)) %>%
      mutate(quantity = round(quantity, 1)) %>%
      spread(key = "category", value = "quantity") %>%
      replace(is.na(.), 0)
    # Debug the filtering // Solution provided by @Waldi; seems to fix most of my problem (see below)
    print(data_)
    data_ <- xts(data_, order.by = data_$date)
    # Debug the xts conversion step
    print(data_)
  })
  
  output$distPlot <- renderDygraph({
    dygraph(filtered_xts()) %>%
      dyOptions(fillGraph = TRUE, drawGrid = TRUE, stackedGraph = FALSE) #When stackedGraph = FALSE, everything works well, but I want it TRUE => it no longer works...
  }
  )
}

# Run the application 
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(动态图)
图书馆(xts)
图书馆(tidyverse)
库(openxlsx)
Sys.setlocale(“LC_时间”,“C”)
数据%
变异(日期=截止日期(日期,origin=“1899-12-30”))
#为绘制直方图的应用程序定义UI
ui%
价差(key=“category”,value=“quantity”)%>%
替换(is.na(.),0)
#调试@Waldi提供的过滤//解决方案;似乎解决了我的大部分问题(见下文)
打印(数据)
数据-它不再工作。。。
}
)
}
#运行应用程序
shinyApp(用户界面=用户界面,服务器=服务器)

如您所见,当dyOptions()中的
stackedGraph=FALSE
时,一切正常,但看起来只有(部分)第一个时间序列包含在TRUE中。。。我缺少什么?

看起来像是
过滤的xts()
没有输出任何值。
尝试:

filtered_xts=input$dateInput[1],
日期%
选择(-c(4:5))%>%
变异(数量=四舍五入(数量,1))%>%
价差(key=“category”,value=“quantity”)%>%
替换(is.na(.),0)%>%data.table::as.data.table()
})

根据我们在评论中的讨论,转换到
数据.table
比转换到
xts
更有效,以便能够充分使用
动态图
选项。

Hmmm。。。你这边行吗?我的不在,这很令人沮丧。多亏了你在上面帖子中的建议,我修复了一个小错误(
filtered_xts
part),但我仍然得到了相同的错误,尽管动态图本身工作得很好:(顺便说一句,自动转换到xts似乎在我的计算机上不起作用,因为我得到了以下错误:
动态图中的错误(filtered_xts):不受支持的类型传递给参数“data”
@Fred LM,我没有尝试使其工作,因为代码不是(仅以问题为中心)。但是,我经常使用动态图,据我所知,我的答案是正确的(但如果不运行整个代码,很难100%确定)。检查后,自动转换到xts仅适用于data.table()上的第一列是datetime时,我没有意识到这一点,因为我大部分时间都在使用data.table。请参阅我的编辑谢谢你的帮助。我已最小化了上面的帖子。没想到这会成为问题,但我的帖子现在更清晰了。好的规则:)除了
stackedGraph=TRUE
不起作用之外,您的解决方案几乎可以完美工作。我正在研究它,但是如果你在我面前找到了解决方案,请不要犹豫告诉我:)非常感谢。我不知道确切的原因,但是
动态图
确实更喜欢
数据。表
:请参阅我的编辑,
as.data.table
使stackedGraph=t无法工作。。。
  filtered_xts <- reactive({
    data_ <- data %>%
      filter(variable == input$variableInput,
             unit == input$unitInput,
             date >= input$dateInput[1],
             date <= input$dateInput[2]
      ) %>%
      select(-c(4:5)) %>%
      mutate(quantity = round(quantity, 1)) %>%
      spread(key = "category", value = "quantity") %>% 
      replace(is.na(.), 0)  %>% data.table::as.data.table()
  })