【问题标题】:Dygraph legend time-date format change to include day of weekDygraph 图例时间日期格式更改为包括星期几
【发布时间】:2016-11-14 19:03:12
【问题描述】:

您好,我正在使用 R dygraphs 包,并且希望能够更改图例时间-日期格式以包含星期几(即“%a”)

我查看了dyOptionsdyLegend,但看不到任何可以帮助我解决此问题的信息...

下面是一个简单的例子......但理想情况下希望它在闪亮的应用程序中......

library(dygraphs)
library(xts)
dygraph(xts(rnorm(100),Sys.time()+seq(100)),main='random_graph')

为了提供一些额外的细节...我希望轴和图例的格式都像:“Wed 22 Jan 2020 08:35:05”。

【问题讨论】:

  • 我觉得不可能,因为你的数据需要是xts,格式是日期。
  • xts 可以同时采用日期或时间戳的索引

标签: r shiny dygraphs


【解决方案1】:

可能的。您需要为dygraphs::dyAxisaxisLabelFormatter 参数提供一个Javascript 函数,该函数接受一个日期参数并根据该日期返回一个字符串。该函数只是作为字符串传入。

我不确定你是否可以访问任何 dygraph 导入的 javascript 库,所以为了简单起见,我包含了一个 vanilla javascript sn-p,它以我认为你想要的格式给出日期。可以使用 javascript 函数 getYear() getFullYear() getHours() getMinutes()getSeconds() 轻松扩展或修改它

library(dygraphs)
library(xts)

my_js <- 'function(d)
          {
            var d = new Date(d.getTime() + 7200*1000);
            var weekday = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
            var months  = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
                           "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
            var result = ""
            result += weekday[d.getDay()] + " " + d.getDate()
            result += " " + months[d.getMonth()] + " " + d.getFullYear();
            return result;
          }'

set.seed(69)
dg <- dygraph(xts(rnorm(100), Sys.time() + seq(100)*10000), main = 'random_graph')
dyAxis(dg, name = "x", axisLabelFormatter = my_js)

【讨论】:

  • 这是一个很好的开始,但有没有办法让图例也包含星期几。除此之外..当您放大图表时,轴输出不会调整以考虑时间戳
  • dygraph.js 中有一个“legendFormatter”选项,但是 dygraphs 包中的 htmlwidget 不提供直接的 R 接口。虽然 dygraph 对象已导出,所以我认为您应该能够使用 htmlwidgets 包注入一些 Javascript。我会调查一下。
  • 谢谢,在为不同级别的缩放获取不同的轴值时,您对缩放问题有任何想法吗?
  • 您可以使用 htmlwidgets::onRender( dg, 'function(el, d, data) {dygraph = window.HTMLWidgets.getInstance(el).dygraph;') 在 javascript 中访问 dygraph,它允许您通过直接在 dygraph 对象上调用 dygraph.js 方法对底层 dygraph 执行任何您想做的事情。但是,用于构建 R 包的 dygraph.js 版本似乎是早于legendFormatter 包含的旧版本。因此,它需要使用大量 javascript 来模拟图例。
  • 好的,我已经看得很清楚了。我能够 fork 项目并将 javascript 库更新到最新版本,但这当然导致 R 界面中出现许多新错误,多次调用不存在的函数,必须先修补这些函数才能得到它画什么。我最终达到了可以在图例框中放置我喜欢的任何内容的地步,但是到那时,格式等方面还有其他问题。我意识到这将需要大量的开发时间。我在 GitHub 上有 logged this issue..
猜你喜欢
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
相关资源
最近更新 更多