为什么一天的空数据是两天宽?

时间:2017-04-20 17:17:32

标签: highcharts

在绘制时间序列数据时,假设我每天都有计数。演示数据:

Jan 1: 10
Jan 2: 20
Jan 3: 30
Jan 4: <no data>
Jan 5: 50
Jan 6: 60
etc.

请注意,1月4日一天的数据缺失。

在highcharts(jsfiddle)中显示时,它看起来像这样:

jsfiddle screenshot

注意&#34;差距&#34;因缺失的一天是两天宽。为什么?我该如何避免这种情况?

我希望将1月3日的数据显示为这样的垂直线:

manually fixed jsfiddle screenshot

我不能作弊并在时间戳上添加6个小时并使用step: "left",因为当用户放大并开始显示更精确的时间戳时,会显示这种作弊行为。

3 个答案:

答案 0 :(得分:2)

不是2天宽。你有关于3.Jan和5.Jan的数据。整个宽度是一个日期。你的积分是每天午夜。您没有一整天(午夜到午夜)的数据。所以你有24小时没有3.Jan和5.Jan之间的数据。要解决此问题,您需要添加更多基于时间的数据,或者使用类别xAxis

答案 1 :(得分:0)

@ wergeld的回答让我意识到我提出了错误的问题。所以我接受了@ wergeld的回答,但是想在这里提供更多细节:

问题不仅在于null数据的宽度,还在于

的基本假设
xAxis: { type: 'datetime' }

表示数据代表单个时间点。我有时间序列数据,其中每个数据点代表一个时间 interval (见下文)。

我认为HighCharts不允许我按照自己的意愿绘制图表。

我想我必须使用类别xAxis。 (区间长度可以在“列”之间变化 - 我现在将忽略它。)

服务器端,我们的间隔更精细,因此放大确实对我们有意义。我刚才惊讶地发现缩放对xAxis类图表(jsfiddle)也有效:

zoomable column highchart

这就是我要做的事情:

  • 使用类别xAxis
  • 假装所有列都同样宽
  • 通过聆听setExtremes xAxis事件(参见jsfiddle
  • 使它们可缩放

关于时间衍生物的脚注

我认为每次测量数据表示相对于时间的导数(并且具有例如bits/s$/month的单位),那么在 n处执行的测量实际上代表时间间隔

[t n-1 ; t n ]

而不是单点时间,例如t n ,因为在测量时,“导数”计算/近似为:Δbits/Δt,但Δt不接近实际上是0。

E.g。销售公关月份是4月份,而不是4月1日或5月1日凌晨12点。

因此Highchart(和flot的?)假装所有时间序列数据代表单个时间点的方法会产生误导性且难以正确解释的图形。

答案 2 :(得分:0)

我的老板有一个好主意:除了在间隔开始时有一个数据点,为什么不在间隔结束时创建一些假数据点呢?这样数据就变成了:

Jan 1 00:00:00: 10
Jan 1 23:59:59: 10
Jan 2 00:00:00: 20
Jan 2 23:59:59: 20
Jan 3 00:00:00: 30
Jan 3 23:59:59: 30
Jan 4 00:00:00: <no data>
Jan 4 23:59:59: <no data>
Jan 5 00:00:00: 50
Jan 5 23:59:59: 50
Jan 6 00:00:00: 60
Jan 6 23:59:59: 60
etc.

它很漂亮! (jsfiddle):

solution

(这当然有一个缺点,即Highcharts的数据量是可能导致性能问题的两倍)