【问题标题】:flot - show time axis without gapsfloat - 显示没有间隙的时间轴
【发布时间】:2011-08-26 11:51:36
【问题描述】:

我正在尝试自定义 jQuery Flot 以消除时间轴上的点之间的间隙。看上图:

它显示了两天的数据,我敢打赌你会发现夜晚。我想要做的是摆脱图表中间的这个恼人的差距。有什么建议如何做到这一点?

【问题讨论】:

标签: jquery jquery-plugins flot


【解决方案1】:

太糟糕了,我不能接受评论作为答案,因为来自 Mark 链接的 George Roberts 的回答很顺利。

所以我要做的就是将浮点模式从“时间”更改为空,然后模拟时间轴。

我创建了两个数组:第一个包含图表数据,第二个包含时间戳:

for (var i=0; i<json.length; i++ ) {
    dotsData.push( [i, json[i].value] );
    ticks.push( json[i].date );
    }                       
}

时间轴仿真:

// flot options
... xaxis: { tickFormatter: function(val) { return formTicks(val, ticks) } } ...

// formTicks function
function formTicks(val, ticksArr) {
    var tick = ticksArr[val];

    if ( tick != undefined ) {
        tick = new Date( tick );

        var hours = tick.getHours(),
            minutes = tick.getMinutes();

            tick = hours+':'+minutes;
    }
    else { tick = '' }

    return tick
}

它解决了问题,但很难区分一天与另一天,所以我添加了标记:

var markings = [],
    firstDay = new Date( ticks[0] ).getDate();

    for (var i=1; i<ticks.length; i++) {
        var loopDay = new Date( ticks[i] ).getDate();
        if ( loopDay != firstDay ) {
            var marking = {
                color: '#000000',
                lineWidth: 1,
                xaxis: { from: i, to: i }
            }

        markings.push( marking )

        firstDay = loopDay; // loop through all days
    }
}

// flot options
grid: { markings: markings }

结果:

【讨论】:

  • 感谢您回来并发布您的完整解决方案。当 SO 允许您接受自己的答案作为解决方案时。
【解决方案2】:

使用专为此类情况设计的 transform 和 inverseTransform。请参阅 FLOT 文档的以下部分。

"transform" 和 "inverseTransform" 是你可以放入的回调 改变数据的绘制方式。你可以设计一个函数来 非线性压缩或扩展轴的某些部分,例如 用对数或一些对数抑制周末或压缩远点 其他手段。 Flot 绘制绘图时,首先将每个值通过 变换函数。这是一个例子,x轴可以转动 用以下代码转换成自然对数轴:

xaxis: {
        transform: function (v) { return Math.log(v); },
        inverseTransform: function (v) { return Math.exp(v); }
       }

【讨论】:

  • 我已经试过了。我用function (v) { if ($.inArray(v, timestamps) &gt; -1){return v} else {return null} }。它消除了间隙中的刻度,但间隙仍然存在。
  • Daniel,您能否发布您的代码,以便我查看 FLOT 调用和正在绘制的数据?
  • 丹尼尔,我刚刚用 xaxis 做了我自己的实验:transform amd 恐怕我不得不同意你的看法。它似乎没有做它应该做的事情。对不起,我帮不上忙!!!问候
  • 感谢您的尝试,尼尔。