背景:需要直接保存echarts生成图片而不是html。
目标:将html处理为png格式。
首先参考官方渲染图片地址,其中提供了两种方式 snapshot-selenium与snapshot-phantomjs
1、查看源码
1.1、生成图表
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.render import make_snapshot
def bar_chart() -> Bar:
c = (
Bar()
.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-测试渲染图片"))
)
return c
bar.render(r'C:\Users\Administrator\Desktop\echarts\one_tset.html')
1.1、selenium方式
from snapshot_selenium import snapshot
make_snapshot(snapshot, bar_chart().render(), "bar0.png")
1.2、phantomjs方式
from snapshot_phantomjs import snapshot
make_snapshot(snapshot, bar_chart().render(), "bar0.png")
2、准备工作
由于当时尝试时,单一方式一直保存不了,所以干脆两种方式全部安装。结果能够正常保存了。
两种方法一起准备,就是下载selenium与phantomjs。
2.1、安装snapshot-selenium & selenium
pip install selenium
pip install snapshot-selenium
2.2、安装snapshot-phantomjs & phantomjs
pip install snapshot-phantomjs
下载地址:http://phantomjs.org/download.html
添加路径:
找到phantomjs文件下的bin文件夹,将其路径设为系统path路径:
3、报错
3.1、下载chromedriver
下载完成后运行时报错:'chromedriver_X64.exe' executable needs to be in PATH
查询相关资料后发现需要下载chromedriver,chromedriver下载地址。
需要下载对应chrome版本的chromedriver,ChromeDriver与Chrome版本对应参照表。或者直接在下载页面中查看notes.txt查看对应的版本。
3.2、配置环境变量
将chromedriver.exe拷贝至谷歌浏览器目录(如 C:\Program Files\Google\Chrome\Application)以及python根目录(C:\Python3.7)。
将谷歌浏览器环境变量添加到path(C:\Users\HD003\AppData\Local\Google\Chrome\Application)。 至此,就可以解决 ‘chromedriver’ executable needs to be in PATH问题了。
4、成功运行代码
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot
#--------------------------------------------
bar = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION))
.add_xaxis(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"])
.add_yaxis("降雨量", [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3])
.add_yaxis("蒸发量", [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3])
.set_global_opts(title_opts=opts.TitleOpts(title="柱状图", subtitle="一年的降雨量与蒸发量"))
# 或者直接使用字典参数
# .set_global_opts(title_opts={"text": "主标题", "subtext": "副标题"})
)
bar.render(r'C:\Users\Administrator\Desktop\echarts\one_tset.html')
make_snapshot(snapshot, bar.render(), r'C:\Users\Administrator\Desktop\bar.png')
4、内网打开html打开为空白页
由于在内网开发,生成的html页面打开为空白页。
notepad++查看生成的文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Awesome-pyecharts</title>
<script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script>
<script type="text/javascript" src="https://assets.pyecharts.org/assets/themes/wonderland.js"></script>
</head>
发现其中的echarts.min.js文件为下载链接,内网无法获取,所以显示为空白页。
4.1、解决方式
下载echarts.min.js:
去echarts官网下载,选取所需的内容后下载。
将echarts.min.js与生成的html放入同一文件夹中。
修改html的头,如下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ECharts</title>
<!-- 引入 echarts.js -->
<script src="echarts.min.js"></script>
</head>
然后再次打开html文件,显示正常。
保存为图片:
make_snapshot(snapshot, r"C:\Users\Administrator\Desktop\one_tset.html", r"C:\Users\Administrator\Desktop\bar.png")
网友评论