Python3.7 保存pyecharts的图片。网页打开ec

2019-10-28  本文已影响0人  Ziger丶

背景:需要直接保存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")
上一篇下一篇

猜你喜欢

热点阅读