内容摘要:


  • 用pyecharts绘制条形图;
  • 错误解决:No module named ‘snapshot_selenium’;
  • 错误解决:‘chromedriver‘ executable needs to be in PATH
  • pyecharts导出png格式的图片

之前,一直使用matplotlib绘图。但是matplotlib自有其局限,比如:当我回测10000根K线时,使用matplotlib画出来的K线,便显得太过拥挤了,以至于无法在有限的平面空间内容进行展示,更不用说观察交易信号了。
这时,pyecharts进入了我的眼帘,是时候换一个绘图工具了!尤其做回测分析时,感觉用pyecharts做出来的图,效果应该是极好的!

首先是入门的示例:

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()

很简单,正常运行!
然后更进一步,给图表添加标题!

from pyecharts.charts import Bar
from pyecharts import options as opts
# 不习惯链式调用的开发者依旧可以单独调用方法
bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
bar.set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
bar.render()

依旧很顺利,执行和输出都没问题。
但是,永远不能高兴太早,紧接着,问题就来了。

因为pyecharts默认生成的是html格式的网页文件,需要用浏览器打开查看。如果要保持为图片格式,
渲染成图片文件,按照官方示例,是这样的:

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")

此时,出现第一个问题:

ModuleNotFoundError: No module named 'snapshot_selenium'

按照提示:没有找到模块:没有名为:‘snapshot_selenium’的模块,怎么办?
既然没有,那就安装吧!于是,安装snapshot_selenium模块,命令如下:

pip3 install snapshot_selenium

安装成功,缺少snapshot_selenium模块的问题,顺利解决。但是,运行python文件,更难搞的问题出现了:

WebDriverException: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

学习的过程,总是充满了意外和波折!没关系,愈挫愈勇,继续找资料,解决它!
错误提示翻译过来是:

Web驱动程序异常:“chromedriver”可执行文件需要位于路径中。请看https://sites.google.com/a/chromium.org/chromedriver/home

疑问挺多的,因为我使用的是微软的edge浏览器,难道也需要谷歌的浏览器驱动吗?
或许是因为snapshot_selenium这个模块,是基于谷歌浏览器的?
找了下snapshot_selenium的官方资料,是这么描述的:

  • 它需要一个外部浏览器驱动程序并渲染图像

其作用是:

  • 使用selenium驱动程序将pyecharts输出渲染为图像

好吧,就是snapshot_selenium模块的锅,它需要一个外部浏览器驱动程序。

查找了一番资料,搜索后发现 需要安装chromedriver,并且需要安装和 chrome 对应版本的chromedriver

那么,怎么查看谷歌chrome浏览器的版本呢?

方法一:在浏览器地址栏输入chrome://version/ 显示如下:

python绘图不显示yticks python画不了图_经验分享


方法二:

在浏览器的右上角,点开帮助,再点击关于Google Chrome(G),成功获得版本的相关信息。

python绘图不显示yticks python画不了图_经验分享_02


如果浏览器不是最新版本的,还会自动更新,更新完毕后,重启一下浏览器即可。

然后就是安装chromedriver了。

查找了一番,有2个地址可以下载:

http://chromedriver.storage.googleapis.com/index.html

https://npm.taobao.org/mirrors/chromedriver/

需要选择和谷歌浏览器相同版本的chromedriver。没什么好说的,下载就是了。

python绘图不显示yticks python画不了图_chrome_03

下载完成后,解压缩。里面只有一个chromedriver.exe文件。
将此文件复制到chrome的安装目录(其实也可以随便放一个文件夹),
然后复制chromedriver.exe文件的路径并加入到电脑的环境变量。

在浏览器地址栏输入chrome://version/后,可以看到chrome的安装目录:C:\Users\17561\AppData\Local\Google\Chrome\Application\chrome.exe

Google Chrome	89.0.4389.90 (正式版本) (64 位) (cohort: 89_Win_72)
修订版本	62eb262cdaae9ef819aadd778193781455ec7a49-refs/branch-heads/4389@{#1534}
操作系统	Windows 10 OS Version 2004 (Build 19041.867)
JavaScript	V8 8.9.255.20
用户代理	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
命令行	"C:\Users\17561\AppData\Local\Google\Chrome\Application\chrome.exe" --enable-audio-service-sandbox --origin-trial-disabled-features=SecurePaymentConfirmation --flag-switches-begin --flag-switches-end
可执行文件路径	C:\Users\17561\AppData\Local\Google\Chrome\Application\chrome.exe

打开环境变量页面:

桌面-此电脑-右键-属性-高级系统设置-高级-环境变量

双击PATH,将你的文件位置添加到后面。比如,我的文件路径是C:\Users\17561\AppData\Local\Google\Chrome\Application\

python绘图不显示yticks python画不了图_html_04

最后,在cmd下输入chromedriver验证是否安装成功:

python绘图不显示yticks python画不了图_html_05


出现以上页面,表示已经安装成功了!再次运行python文件,结果……

我万万没有想到——

python绘图不显示yticks python画不了图_经验分享_06


这简直了!此刻的心情,完全无法用言语表述!

罢了,只能上终极绝招了!

直接把之前下载的chromedriver.exe文件,复制到与python文件同一目录内!

再次运行python文件,终于成功了!

不再提示chromedriver.exe不在路径中了,并且成功导出了png格式的图片。

另外,发现,此模块不支持导出JPG格式的文件。

python绘图不显示yticks python画不了图_python_07


终于可以愉快地继续学习了!

再来个示例,使用内置的主题!

# 画柱形图
from pyecharts.charts import Bar
# 设置图表参数
from pyecharts import options as opts

# 使用 snapshot-selenium 渲染图片
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot

# 使用主题。内置主题类型可查看 pyecharts.globals.ThemeType
from pyecharts.globals import ThemeType

# 主题在此进行设置
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))


bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
bar.add_yaxis("商家B", [15, 6, 45, 20, 35, 66])
# 设置标题
bar.set_global_opts(title_opts=opts.TitleOpts(title="各品种销售情况", subtitle="商家A、B销售分析"))

# 保存为图片文件
# 不支持JPG格式
# 此命令同样生成html网页文件
make_snapshot(snapshot, bar.render('O:\\pyecharts文件\\bar.html'), "bar.png")


# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
# bar.render('O:\\pyecharts文件\\bar.html')

python绘图不显示yticks python画不了图_chrome_08


效果还是很赞的!

就目前的几个例子而言,pyecharts的绘图要比matplotlib简单许多。

这篇文章,就写到这吧。
其他的,之后再做研究!
(完)