Dygraph:JS函数适用于axisLabelFormatter,但不适用于valueFormatter
Dygraphs: JS function working for axisLabelFormatter but not for valueFormatter
我正在开发一款Shiny应用程序,用于使用Dygraph软件包可视化制造过程数据。我的数据如下(时间以秒为单位):
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,因为Dygraph在绘图时将观测值折叠在同一秒内,我无法解决这个问题):
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值(用鼠标悬停显示的值)。为此,我在服务器中声明了一个JS函数。提取自时间原点以来经过的秒数的R脚本:
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;}'
然后,我在为Shiny输出使用Dygraph时使用此函数:
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。
任何帮助都将不胜感激。提前谢谢。
我也遇到了这个问题,现在我终于解决了。
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)
您也可以将if-else
语句添加到getsec
函数中,但我将把它留给您,因为我对javascript
非常陌生。
相关文章:
- HTML5 Canvas toDataURL(“image/png”)适用于一些绘画,而有些则不然,不确定原因
- JavaScript不显示剩余字符,但适用于其他页面
- 我如何完善这个Javascript代码,使其只适用于来自图像的链接(而不是来自文本的链接)
- 为什么这只适用于身体部分而不是头部
- 为什么不't此正则表达式适用于重复出现的对
- document.getElementById 对内部 html 的调用适用于 $_POST 和 $_GET 变量,但不
- JavaScript 位置适用于本地主机而不是服务器
- Rally App SDK 2.0:Rallymultiobjectpicker,适用于不显示displayField的
- jQuery事件在Mozilla上不起作用,并且适用于其他浏览器
- Angular.js - 控制器不为索引执行,适用于其余模板
- D3 .on 更改适用于文本而不是图表
- Zillow 数据 - json_encode不起作用 - 适用于常规变量
- 弹出模式仅适用于表格中的第一个元素,第二次单击后不会再次打开
- Phonegap Android项目适用于模拟器,而不是实际的手机
- ajax jonp 不应该适用于 请求的上不存在“访问控制-允许源”标头
- AngularJS:ng-单击不起作用,适用于<按钮>
- Javascript不会在移动设备上加载.适用于桌面
- 为什么我的代码适用于高度:100px,而不是高度:100%
- 拖放区.js + Laravel-多文件上传不起作用(仅适用于一个文件)
- 哪些限制适用于不透明响应