1. 问题发现
pyecharts画HeatMap
中纵坐标y_axis不能正常显示,显示的是索引值,即0,1,2……,而不是对应的label值。
例如在jupyter notebook 中运行如下代码:
from pyecharts import HeatMap
x_axis = ["12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a","12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"]
y_aixs = ["Saturday", "Friday", "Thursday","Wednesday", "Tuesday", "Monday","Sunday"]data = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]heatmap = HeatMap()
heatmap.add("热力图直角坐标系", x_axis, y_aixs, data, is_visualmap=True,visual_text_color="#000", visual_orient='horizontal')
heatmap
输出的热力图中,纵坐标显示的是y_aixs的索引0,1,2……,而不是对应的value值"Saturday",“Friday”, “Thursday”,……
2. 问题探索
在 https://github.com/pyecharts/pyecharts/pull/843 中有该问题的相关讨论。该问题确实为旧版本中的一个bug。
根据 pyecharts 的版本日志(https://pyecharts.org/#/zh-cn/changelog )显示,这个bug在 version 0.5.5 已经被修复:
但其实并没有,在 version 0.5.11 中依然存在(https://github.com/pyecharts/pyecharts/issues/572 中有讨论)。
在全新版本v1.0.0 开始这个bug才被修复。而且要注意v0.5.x 和 v1 之间并不兼容。0.5.x 版本现在已经不再进行维护,所以比较推荐大家使用v1 之后的版本。
怎么查看你所使用的pyecharts的版本信息呢?
在cmd或Anaconda Prompt中运行:pip list
或者 pip freeze
如上,我使用的是v0.5.11
附上pyecharts的
主页:https://pyecharts.org/#/
官方文档:https://github.com/pyecharts/pyecharts/ (v1.x 版本)
https://05x-docs.pyecharts.org/#/ (v0.5.X 版本)
以及安装方法:
# 安装 v1 以上版本
$ pip install pyecharts -U# 如果需要安装 0.5.11 版本,可以使用
# pip install pyecharts==0.5.11
3. 本地修复方法
如果确实需要使用 v0.5.x,可以参考来自大神的本地修复方法(https://github.com/pyecharts/pyecharts/pull/843 ),可以解决这个bug,同时不影响其它函数的正常使用!
方法如下:
- 打开
pyecharts\echarts\axis.py
,将32-34行代码:
if not isinstance(formatter,types.FunctionType):formatter = "{value} " + formattersuper(YAxisLabel, self).__init__(formatter=formatter, **kwargs)
- 修改为:
super(YAxisLabel, self).__init__(**kwargs)
如下,我的 axis.py
在C:\Users\admin\Anaconda3\Lib\site-packages\pyecharts\echarts
文件夹下,注释掉32-34行(比直接删掉更保险,万一出什么问题容易回溯),然后添加一行:
之后重启jupyter notebook即可。
修复之后的热力图如下:
`