内容摘要:
- 用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/
显示如下:
方法二:
在浏览器的右上角,点开帮助,再点击关于Google Chrome(G),成功获得版本的相关信息。
如果浏览器不是最新版本的,还会自动更新,更新完毕后,重启一下浏览器即可。
然后就是安装chromedriver了。
查找了一番,有2个地址可以下载:
http://chromedriver.storage.googleapis.com/index.html
https://npm.taobao.org/mirrors/chromedriver/
需要选择和谷歌浏览器相同版本的chromedriver。没什么好说的,下载就是了。
下载完成后,解压缩。里面只有一个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\
最后,在cmd下输入chromedriver验证是否安装成功:
出现以上页面,表示已经安装成功了!再次运行python文件,结果……
我万万没有想到——
这简直了!此刻的心情,完全无法用言语表述!
罢了,只能上终极绝招了!
直接把之前下载的chromedriver.exe
文件,复制到与python文件同一目录内!
再次运行python文件,终于成功了!
不再提示chromedriver.exe
不在路径中了,并且成功导出了png格式的图片。
另外,发现,此模块不支持导出JPG格式的文件。
终于可以愉快地继续学习了!
再来个示例,使用内置的主题!
# 画柱形图
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')
效果还是很赞的!
就目前的几个例子而言,pyecharts的绘图要比matplotlib简单许多。
这篇文章,就写到这吧。
其他的,之后再做研究!
(完)