如何在Dygraphs x轴上跳过周末。

时间:2013-07-26 19:00:48

标签: javascript dygraphs

我正在尝试使用DyGraphs绘制股票数据。它在绘制和缩放数据方面做得很好。但由于股票在假期没有交易,我的数据存在差距。我不希望星期六和星期日在x轴上显示。我想在谷歌财经上有这样的图表,其中x轴跳过星期六和星期日(没有数据的日期)。那可能吗?如果我玩绘图仪选项,我可以实现这个结果吗?

P.S。如果图表不会缩放到小时或分钟级别,我不介意。

2 个答案:

答案 0 :(得分:2)

多年以后,我有一个简单的解决方案。

以下是我使用的数据:https://pastebin.com/kbT6gY2u

它被格式化为显示为烛台(日期,开放,关闭,高,低),因为我使用此处找到的绘图仪:http://dygraphs.com/tests/plotters.html但是我的解决方案将适用于默认绘图仪。

原则是:

  • 将数据中的每个日期推送到数组,并用索引替换日期。这将删除数据中的所有空白,以便您可以拥有一个连续图表。
  • 创建自定义axisLabelFormatter以在X轴上再次将索引转换为日期
  • 创建自定义valueFormatter,以便在图例/鼠标悬停
  • 上再次将索引转换为日期

代码示例(使用underscore.js和moment.js代码清晰度)

var dateIndex   = [];
var data    = _.map(data, function(line, n) {
    dateIndex.push(line[0]); // Save the date to the array
    line[0] = dateIndex.length-1; // Replace the date by the index of the date in the array
    return line;
});
var g = new Dygraph(element, data, {
    axes: {
        x: {
            valueFormatter: function (val, opts, series_name, dygraph) {
                // val is the date, which we have rewritten to the array's index.
                // So here we can exchange it back for the actual date, and format it
                return moment(dateIndex[val]).format("dddd, MMM Do YYYY, h:mm a");
            },
            axisLabelFormatter: function (val, granularity, opts, dygraph) {
                return moment(dateIndex[val]).format("MMM DD");
            }
        }
    }
});

答案 1 :(得分:1)

我一直认为,也许我们可以从Dygraphs中抽象出来,让轴的定义不仅仅是线性与对数,而是问题在于它很容易变得低效。 Dygraphs很快,有时我们会保留功能以保持这种状态。但任何想法都会受到欢迎。