时间序列数据的相等 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 手动完成。我希望这对某人有帮助。
我有一个时间序列数据,我试图从中使用 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
在我搜索 python-nvd3
的文档之前,但那里没有记录分配 tickValues
,所以我不得不使用 javascript 手动完成。我希望这对某人有帮助。