【问题标题】:Dygraphs: JS function working for axisLabelFormatter but not for valueFormatterDygraphs:JS 函数适用于axisLabelFormatter,但不适用于valueFormatter
【发布时间】:2015-09-09 03:08:30
【问题描述】:

我正在开发一个 Shiny 应用程序,用于使用 Dygraphs 包可视化制造过程数据。我的数据看起来像这样(以秒为单位的时间):

       Time                     Var1                    Var2
       0.05                0.2199809                180.2101
       0.10                0.2199809                180.1942
       0.15                0.2358754                180.1465
       0.20                0.2222697                180.1306       
       0.25                0.2222697                180.1306
       0.30                0.1768748                180.1465

首先,我将我的数据转换为 xts 格式(我乘以 1000,因为 Dygraphs 在绘图时会在同一秒内折叠观察结果,我无法解决这个问题):

  data_xts<-xts(data, as.POSIXct(1000*data[,"Time"], origin = "1970-01-01"))

这会产生一个像这样的 xts 对象:

                             Time                  Var1                    Var2
1970-01-01 00:00:50          0.05             0.2199809                180.2101
1970-01-01 00:01:40          0.10             0.2199809                180.1942
1970-01-01 00:02:30          0.15             0.2358754                180.1465
1970-01-01 00:03:20          0.20             0.2222697                180.1306
1970-01-01 00:04:10          0.25             0.2222697                180.1306
1970-01-01 00:05:00          0.30             0.1768748                180.1465

现在我想在几秒钟内获得一个带有 x 轴标签的 Dygraph 图(如在时间变量中)以及图例 x 值 - 以鼠标悬停出现的值 - 以秒为单位。为此,我在 server.R 脚本中声明了一个 JS 函数,以提取自时间起源以来经过的秒数:

  getsecs<- 'function(d) {
            var day=d.getDate();
            var hour=d.getHours();
            var minute=d.getMinutes();
            var second=d.getSeconds();
            var secs=84600*(day - 1)+3600*hour+60*minute +second;
            return 0.001*secs;}'

然后我在构建 Dygraph for Shiny 输出时使用此功能:

 output$mygraph <- renderDygraph({
    VAR<-data_xts()[,c('Var1','Var2')]
    dygraph(VAR) %>%
    dySeries(colnames(VAR)[2], axis = 'y2') %>%
    dyAxis("x",axisLabelFormatter=JS(getsecs), valueFormatter=JS(getsecs)) %>%
    dyAxis("y", label = colnames(VAR)[1]) %>%
    dyAxis("y2", label = colnames(VAR)[2], independentTicks = TRUE) %>%
    dyOptions(drawGrid = input$showgrid) %>%             
    dyOptions(drawPoints = TRUE, pointSize = 2) %>%
    dyHighlight(highlightCircleSize = 3, highlightSeriesOpts = list(strokeWidth = 3)) %>%  
    dyLegend(width = 800) %>%
    dyRangeSelector()

})

这样做我得到了我想要的 x 轴标签,但是鼠标悬停不起作用(系列没有突出显示,所以 x 图例是空白的)。当我在控制台 (F12) 中搜索时,出现此错误:

 d.getDate is not a function

似乎该错误与getsecs函数输出的格式有关,但我不明白为什么它适用于labelFormatter但不适用于valueFormatter。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: javascript r datetime shiny dygraphs


    【解决方案1】:

    我也遇到了这个问题,现在终于解决了。

    valueFormatter - 返回valueOf 日期

    axisLabelFormatter - 返回实际日期本身

    因此,为了使它们相同,您必须稍微修改 valueFormatter 的函数:

    getsecs2 <- 'function(e) {
                var d = new Date(e);
                var day=d.getDate();
                var hour=d.getHours();
                var minute=d.getMinutes();
                var second=d.getSeconds();
                var secs=84600*(day - 1)+3600*hour+60*minute +second;
                return 0.001*secs;}'
    

    然后将valueFormatter=JS(getsecs) 更改为valueFormatter=JS(getsecs2)

    您也可以在getsec 函数中添加一个if-else 语句,但我将把它留给您,因为我对javascript 还很陌生。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-24
      • 2017-11-22
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      相关资源
      最近更新 更多