时间序列数据的相等 x 轴刻度

Equal x-axis ticks for time series data

我有一个时间序列数据,我试图从中使用 nvd3 构建一个 stackedAreaChart。系列看起来像这样:

xdata = ['2017-11-17', '2017-12-17', '2018-01-17', '2018-02-17', '2018-03-17', '2018-04-17']
ydata = [7277L, 9579L, 6291L, 6715L, 8743L, 9879L]

我将 xdata 中的日期转换为 unix 格式,它变成了这样:

xdata = [1510873200000L,
   1513465200000L,
   1516143600000L,
   1518822000000L,
   1521241200000L,
   1523916000000L]

然后我创建一个图表:

chart = stackedAreaChart(name='stackedAreaChart', 
                             height=400, 
                             width=400 
                             ,x_is_date=True
                            )
chart.add_serie(name = 'Chart1', y = ydata, x = xdata )

问题是我希望所有 x 数据都显示为 x 轴上的刻度,或者至少在有更多数据的情况下对其进行自定义。 我得到如下图所示的输出。

如您所见,日期显示不均。我希望它是 2017 年 11 月 17 日、2017 年 12 月 17 日、2018 年 1 月 17 日...

我以前没有用过js,但我尝试的一切都是不幸的。我尝试添加额外的系列来更改 x 轴格式,但问题是在构建绘图后添加了额外的系列并且看不到效果。

我的猜测是,可靠地解决这个问题的唯一方法是确保所有数据集的长度相等,并且它们都以完全相同的 x 轴值开始和结束,并且如果x轴值在其中一个数据集中定义,它也在所有其他数据集中定义,并且数据集均按x轴值递增排序。

因为我是 nvd3 的业余爱好者,所以很可能不需要这种程度的一致性,但它可能不会使您的问题变得更糟。

所以

方法是将 x 轴的 tickValues 分配给 xdata。 这是我写的解决方案:

chart = stackedAreaChart(name='stackedAreaChart' 
                         ,height=500 
                         ,width=900 
                         #,x_is_date=True
                         ,use_interactive_guideline = True
                         ,margin_bottom = 120
                        )
chart.create_x_axis(name = "xAxis", date = True,  format = '%b %Y' )
chart.axislist['xAxis']['tickValues']="""Object.values(datum[0])[0].map(x => x.x)"""

datum是在chart.htmlcontent

输出的js脚本中生成的数据变量

在我搜索 python-nvd3 的文档之前,但那里没有记录分配 tickValues,所以我不得不使用 javascript 手动完成。我希望这对某人有帮助。