pyecharts使用入门及问题解决

0 引入

Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
好了,前面是官方简介,具体地址如下:GitHub官方网站
我最近在用python的matplotlib绘图时,遇到的一些绘图需求用matplotlib实现时比较难受,由于之前用过echarts,怀念这种配置化的方式,于是尝试一下pyecharts。

1 安装pyecharts

老样子,pip安装:

pip3 install pyecharts

2 初步使用

安装完成后试试官网demo:

from pyecharts.charts import Bar

bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
bar.render()

运行代码后会生成render.html文件,我们点击在chrome尝试打开,可能会发现html中的图加载不出来。我们点开这个html看一下:
在这里插入图片描述
因为网络原因,加载https://assets.pyecharts.org/assets/echarts.min.js资源可能很慢或者超时,会导致我们的html图也加载不出来。
有的同学可能想到了,我们使用离线的echarts.min.js资源对该文件进行替代可以解决这个问题,例如我们下载一个echarts.min.js,放在和render.html的同一目录,并将第六行修改为以下内容:

 <script type="text/javascript" src="echarts.min.js"></script>

3 导出图片

同样是官网的例子,这里pyecharts用到了snapshot_selenium和chrome渲染图形并截取图片,因此我们需要下载好chromedriver。
如果直接运行会报错:

WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
from pyecharts.charts import Bar
from pyecharts.render import make_snapshot

# 使用 snapshot-selenium 渲染图片
from snapshot_selenium import snapshot

bar = (
    Bar()
    .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
    .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
)
make_snapshot(snapshot, bar.render(), "bar.png")

chromedriver下载方式参照:解决Message: ‘chromedriver’ executable needs to be in Path

4 Notebook展示

在Jupyter Notebook中,使用render_notebook()方法展示图表,示例代码如下:

from pyecharts.globals import CurrentConfig, OnlineHostType
CurrentConfig.ONLINE_HOST = OnlineHostType.NOTEBOOK_HOST
from pyecharts.charts import Bar

bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
bar.render_notebook()

在这里插入图片描述
执行此段代码可能会显示空白的图表,是因为echarts资源没有加载到notebook中。
下面说一下解决办法。

4.1 开启nbextension功能

pip3 install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
pip3 install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

然后重启notebook,可以在首页看到一个Nbextensions的标签,点进去里面有很多插件,这里不赘述。

4.2 下载并激活pyecharts-assets

pyecharts-assets是以插件的形式在notebook中提供echarts静态文件的工具,执行以下命令安装并激活:

git clone https://github.com/pyecharts/pyecharts-assets.git
cd pyecharts-assets
jupyter nbextension install assets
jupyter nbextension enable assets/main

激活后可以在Notebook的Nbextensions中看到assets/main插件被打上了勾。

4.3 配置Notebook Host

上面的示例代码有写这个配置,配置好了之后Notebook就能正常展示图表了。

from pyecharts.globals import CurrentConfig, OnlineHostType
CurrentConfig.ONLINE_HOST = OnlineHostType.NOTEBOOK_HOST

4.4 还是展示不了?

这里提供一个建议,看看你的notebook的配置文件中的host是不是设置的0.0.0.0,这样会导致程序读取assets资源的目标地址和notebook提供的资源地址不一致,读不到资源自然无法展示。
我们可以在展示图片的地方进行调试,发现这里是有一个资源地址的:
在这里插入图片描述
如果你是host设置的是0.0.0.0,host不一致的情况下,如果因为主机防火墙的限制,0.0.0.0和localhost会不通,所以无法加载资源进而无法展示图表。
完成上述几步后,可以正常展示了:
在这里插入图片描述

5 一些Bug

5.1 ImportError: cannot import name ‘Bar’

因为pyecharts升级了新版本,不支持旧的API,使用新版的调用方法即可:

from pyecharts.charts import Bar

5.2 TypeError: init() takes from 1 to 2 positional arguments but 3 were given

问题同上,Bar中不传值即可:

from pyecharts.charts import Bar

bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
bar.render()

版权声明:本文为weixin_39198406原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。