簡體   English   中英

dygraphs中dyEvents的日期向量輸入:R有光澤

[英]date vector input for dyEvents in dygraphs: R shiny

我有一個日期向量,可以從一個下拉框中選擇,可以選擇多個日期 通過選擇這些日期,事件行將出現在已選擇的日期。 但是我看到dyEvent沒有采用日期的向量。當dyEvent中的日期被向量事件行替換時,不會出現。 我提供了以下代碼。 任何幫助將不勝感激。

ui.R
library(shiny)
library(dygraphs)
shinyUI(fluidPage(
  titlePanel("Tool"),
  sidebarLayout(
    sidebarPanel(
      uiOutput("choosedates")
      ),
    mainPanel(
      dygraphOutput("plot")
      )
  )
  ))


server.R
library(shiny)
library(dygraphs)
shinyServer(function(input, output) {
  Data<-data.frame(Time=seq(as.Date("7/29/2012","%m/%d/%Y"),as.Date("8/7/2012","%m/%d/%Y"),by="1 day"),Volume=c(100,150,120,300,250,50,100,120,80,100))
  output$choosedates<-renderUI({
    selectInput("dates","Choose dates to be marked by event line",as.character(Data$Time),multiple=TRUE)
  })
  library(xts)
  Dataxts<-reactive({
    xts(Data$Volume,order.by=as.Date(Data$Time,"%m/%d/%Y"))
  })
  output$plot<-renderDygraph({
    dygraph(Dataxts(), main = "Visualization")%>%
      dyEvent(date =as.character(input$dates), "Dummy", labelLoc = "bottom",color = "red", strokePattern = "dashed")%>%
      dyAxis("y", label = "Units sold in millions")%>%
      dyOptions(axisLabelColor = "Black",digitsAfterDecimal = 2,drawGrid = FALSE)
  })
  })

我沒有任何關於包dygraphs經驗,所以我無法保證這是最簡單的方法,但我能夠通過下面的代碼使應用程序正常運行。


ui.R

library(shiny)
library(dygraphs)
##
shinyUI(fluidPage(

  titlePanel("Tool"),

  sidebarLayout(

    sidebarPanel(
      uiOutput("choosedates")
    ),

    mainPanel(
      dygraphOutput("plot")
    )
  )
))

server.R

library(shiny)
library(dygraphs)
library(xts)
##
shinyServer(function(input, output) {

  Data <- data.frame(
    Time=seq(as.Date("7/29/2012","%m/%d/%Y"),
             as.Date("8/7/2012","%m/%d/%Y"),
             by="1 day"),
    Volume=c(100,150,120,300,250,
             50,100,120,80,100))

  output$choosedates <- renderUI({
    selectInput(
      "dates",
      "Choose dates to be marked by event line",
      as.character(Data$Time),
      multiple=TRUE)
  })

  Dataxts <- reactive({
    xts(
      Data$Volume,
      order.by=as.Date(Data$Time,"%m/%d/%Y"))
  })
  ##
  getDates <- reactive({
    as.character(input$dates)
  })

  addEvent <- function(x,y) {
    dyEvent(
      dygraph=x,
      date=y,
      "Dummy", 
      labelLoc = "bottom",
      color = "red", 
      strokePattern = "dashed")
  }

  basePlot <- reactive({ 
    if (length(getDates()) < 1) {
      dygraph(
        Dataxts(),
        main="Visualization") %>%
        dyAxis(
          "y", 
          label = "Units sold in millions") %>%
        dyOptions(
          axisLabelColor = "Black",
          digitsAfterDecimal = 2,
          drawGrid = FALSE)
    } else {
      dygraph(
        Dataxts(),
        main="Visualization") %>%
        dyAxis(
          "y", 
          label = "Units sold in millions") %>%
        dyOptions(
          axisLabelColor = "Black",
          digitsAfterDecimal = 2,
          drawGrid = FALSE) %>%
        dyEvent(
          dygraph=.,
          date=getDates()[1],
          "Dummy", 
          labelLoc = "bottom",
          color = "red", 
          strokePattern = "dashed")
    }
  })
  ##
  output$plot <- renderDygraph({

    res <- basePlot()
    more_dates <- getDates()
    if (length(more_dates) < 2) {
      res
    } else {
      Reduce(function(i,z){
        i %>% addEvent(x=.,y=z)
      }, more_dates[-1], init=res)
    }

  })

})

主要變化是兩個注釋行( ## )之間的功能。 我做了一個反應函數getDates()getDates()返回當前的日期選擇 - 我甚至不確定這是否有必要,但這通常是我對用戶輸入所做的。 更重要的是,我創建了一個(非反應性)函數addEvent ,它以一種方便的方式定義,方便與高階函數Reduce - 即x參數表示先前的狀態( dygraph對象被累積), y參數是我們對前一個狀態(我們添加的行)的修改。

basePlot()主要只是一個輔助函數,以避免在應用程序首次啟動時很可能產生的錯誤(並且沒有選擇日期輸入)。 如果沒有選擇日期,則輸出基礎dygraph ,如果選擇了一個或多個,則輸出基本圖形加上第一個日期行。

要返回最終的繪圖對象(在output$plot ),我們創建基本繪圖( res ),並檢查是否存在多個日期輸入。 如果用戶請求兩行或更多行,我們使用Reduce和UDF addEvent來累積修改(日期行),使用res作為初始值,將第二個到最后一個日期輸入作為修改值。


以下是正在運行的應用程序的一些屏幕截圖:

啟動: 在此輸入圖像描述


第一輸入: 在此輸入圖像描述


多輸入: 在此輸入圖像描述

我認為這是一個更好的解決方案,至少更短:

p <- dygraph(df_sub)
for (i in 1:dim(df_sub)[1]){
p <- p %>% dyEvent(date = df_sub$Date[i], label='xyz', labelLoc='bottom')
}

作者:user2996185於2015年9月29日7:06

https://stackoverflow.com/a/32837723/6253668

動態地向dygraph r添加事件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM