首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态动态趋势与同步

动态动态趋势与同步
EN

Stack Overflow用户
提问于 2015-11-18 08:03:38
回答 2查看 763关注 0票数 0

我的页面上有两张动态图。定期从源读取新的时间序列数据并将其写入局部变量,然后使用以下命令更新图表:

代码语言:javascript
复制
    vm.graph1.updateOptions(
      { 'file': customData1, 'labels': vm.labels1 });
    vm.graph2.updateOptions(
      { 'file': customData2, 'labels': vm.labels2 });

这是非常好的工作,图表显示实时趋势如预期。但是,当我试图通过包含syncrhonizer.js并使用以下命令来同步这两个图时:

代码语言:javascript
复制
vm.graphSync = Dygraph.synchronize(vm.graph1, vm.graph2);

然后“实时更新”停止工作。换句话说,图形不显示任何新的传入值(它只是显示相同的静态时间跨度)。同步工作很好,无论是选择和缩放。

数据仍在更新,但现在我必须双击图形(或手动pan),以查看最新的数据。

有谁有任何想法或工作解决方案,以同步使用动态趋势?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-19 09:47:45

这是一个可行的解决方案,然而,我不得不改变"synchronizer.js“从图形,所以意见和其他建议仍然欢迎。

在attachZoomHandlers函数中的synchronizer.js中,我做了以下更改:

代码语言:javascript
复制
for (var j = 0; j < gs.length; j++) {
    if (gs[j] == me) continue;

    //added if/else block, the original code was the stuff inside else block
    if (me.ignoreXrangeSync && me.ignoreXrangeSync === true) {
        //if ignoreXrangeSync flag is set, only update y-range
        gs[j].updateOptions( {
           valueRange: yrange
       });
    }
    else {
      //if ignoreXrangeSync flag is NOT set, run original code (so manual zoom works)
      gs[j].updateOptions( {
         dateWindow: range,
         valueRange: yrange
      });
   }
}

在我的原始代码中,我做了这个改变。

代码语言:javascript
复制
vm.graph1.ignoreXrangeSync = vm.graph2.ignoreXrangeSync = true;
vm.graph1.updateOptions(
      { 'file': customData1, 'labels': vm.labels1 });
vm.graph2.updateOptions(
      { 'file': customData2, 'labels': vm.labels2 });
vm.graph1.ignoreXrangeSync = vm.graph2.ignoreXrangeSync = false;

另外,我需要为我的动态趋势图添加这些缩放回调(每个图一个),以便在手动缩放图形后双击开始。

代码语言:javascript
复制
var graph1ZoomCallback = function () {   //callback for graph1
    if(!vm.graph1.isZoomed()) {          //if graph1 has been double clicked
      vm.graph2.ignoreXrangeSync = true; //note, graph2
      vm.graph2.resetZoom();
      vm.graph2.ignoreXrangeSync = false;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2015-11-18 16:27:18

您需要在更新数据之后显式地设置dateWindow

代码语言:javascript
复制
vm.graph1.updateOptions(
  { 'file': customData1, 'labels': vm.labels1 });
vm.graph2.updateOptions(
  { 'file': customData2, 'labels': vm.labels2 });
vm.graph1.updateOptions({
  dateWindow: vm.graph1.xAxisExtremes()
});
// ^^^ this will synchronize the other charts, too

您必须这样做的事实可以被认为是带有同步器的错误。可以随意使用提出问题来对抗图形,最好是通过dygraphs.com/fiddle链接到repro。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33774592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档