在用 pyecharts 练手的时候,尝试用下表中的数据构造一份折线堆叠图
year_line = Line().add_xaxis(summary.columns.to_list())
# year_line = Line().add_xaxis([1,2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,13])
for i in range(4):
year_line.add_yaxis(str(i+2012),
stack='销量', # 堆叠参数,会使数据在坐标轴上堆叠不相交
y_axis=summary.iloc[i].values.tolist(),
is_smooth=True
)
year_line.set_global_opts(
tooltip_opts=opts.TooltipOpts(trigger="axis"),
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
)
year_line.render_notebook()
然而输出的图表发现图中的数据序列并不是从 1 开始,而是偏移一个单位从 0 或 2 开始,并且如果 x 轴长度变短会导致图中数据缺失。
上图是我手动扩充了 x 轴的序列后的结果,虽然数据显示完全了,但数据序列和 x 轴依然不对应。对照着官方文档和示例,在一个多小时的时间里,不断尝试各种可能的配置项和参数。
最终发现问题在于 x 轴序列参数的数据类型上。上面不论是转换生成列表或者是手动输入的列表,其中元素的数据类型都是 int
,对照官方示例上传递的元素数据类型为字符串 str
,进行更改后才输出预期结果。
year_line = Line().add_xaxis(['一月','二月','三月','四月','五月','六月',
'七月','八月','九月','十月','十一月','十二月'])
总结:在排除了语法和参数错误的情况下,仍然无法得到预期结果,问题有可能出现在变量的数据类型和维度上。
毕竟 python 作为动态语言,其变量的类型声明一直是被吐槽的点。
最后附上 pyecharts 官方文档和示例:
文档
https://pyecharts.org/#/zh-cn/
示例
https://gallery.pyecharts.org/#/README