【发布时间】:2017-09-04 07:14:12
【问题描述】:
我想使用 Highcharts StockChart 库来制作图表。以下是我需要创建的图表的更多信息:
- 图表类型为
datetime - 数据每分钟都在更新(它是来自股票的数据),因此图表会不断更新。
- 图表的数据是从上午 9:00 到上午 11:40,然后从下午 12:35 到下午 3:00(有午休时间)。
- 数据以 5 分钟间隔的条形显示(每 5 分钟接收一次数据,午餐休息时间除外)。
- 收到数据后,条形将开始从左到右绘制。
- 无论图表上显示多少数据,条形宽度都需要相同。
- 图表的 x 轴标签需要始终相同且位于相同位置(从上午 9:00 到下午 3:00 每小时),即使有缺失数据(必须在 x 轴上画一条线) .
所以,我在图表的 x 轴上使用设置为当天下午 3:00 的 max 属性。有了这个,我可以:
- 让条形宽度相同
- 在相同的时间间隔(直到下午 3 点)绘制 x 轴,而不考虑缺失数据。
在午休时间(上午 11:40)之前一切正常。但是,当接收到中午 12:35(午休后)的数据时,图表将忽略 max 属性,并且绘制的 x 轴的最后一行是直到下午 1 点(这条线需要绘制到下午 3 点)。我假设这是因为直到上午 11:40 之前 5 分钟的所有数据都存在,因此图表了解需要绘制数据的时间间隔,并且还可以在相同的时间间隔上绘制 x 轴线。但是一旦数据出现差距,图表就不再知道数据是否会以 5 分钟的间隔持续出现,因此只会考虑到现在为止收到的所有数据,而忽略 max属性。
为了解决这个问题,我尝试了不同的选项:
- 我将
ordinal属性设置为false。有了这个,我可以解决缺少 x 轴标签的问题,直到下午 3 点,但问题是午休时间会在图表上出现间隙。我需要合并午休时间并将 x 轴标签绘制到下午 3 点。 - 我尝试使用
tickInterval属性并能够设置x 轴的间隔,但仅适用于正在绘制的数据。但是,x 轴标记它仍然到下午 1 点,需要到下午 3 点。 - 我尝试在午休时使用
breaks属性,同时使用设置为false 的ordinal属性但没有奏效。另外,图表需要在午休时间合并;使用此属性会故意造成间隙,因此此属性无法帮助我解决此问题。
所以,我注意到在有数据的地方正确更改了间隔,但是在 x 轴上没有数据的地方没有画线(只到下午 1 点,直到下午 3 点)。如果我使用ordinal 属性,它将显示所有缺失数据的x 轴线,但需要在午休时隐藏间隙。
对此的任何帮助表示赞赏 =)
更新:
我注意到当仍然没有数据时,如果使用 v1.3.1 的 highcharts(我目前正在使用的那个),x 轴线会正确绘制到下午 3 点,但如果使用最新版本,这不会发生。对于最新版本,max 属性似乎被忽略了。
在 cmets 上包含我的代码的 jsfiddle 链接(因为 stackoverflow 不允许我发布很多链接,因为没有足够的声誉)。
【问题讨论】:
-
上午 11:40 之前的图表:使用 v1.3.1:jsfiddle.net/K4Cj6/195,使用最新版本 (v5.0.14):jsfiddle.net/K4Cj6/196。直到下午 12:40 的图表:使用 v1.3.1:jsfiddle.net/K4Cj6/197,使用最新版本 (v5.0.14):jsfiddle.net/K4Cj6/198。带有所有条形的图表(适用于两个版本):使用 v1.3.1:jsfiddle.net/K4Cj6/199,使用最新版本(v5.0.14):jsfiddle.net/K4Cj6/200。
标签: highcharts highstock