• 使用phantomjs将pyecharts生成的html渲染为png


    以前用pyecharts对每日数据可视化,无奈邮件没法发送包含js的网页,这可累坏我了。考虑了几个小时,最后决定把echarts生成的HTML文件渲染成图片在给邮件发送给各位领导。

    echarts的官网有实现方法,比较简单。

    snapshot-phantomjs

    安装

    $ pip install snapshot-phantomjs

    snapshot-phantomjs 是 pyecharts + phantomjs 渲染图片的扩展,需要先安装 phantomjs,安装方法请参照官网 phantomjs.org/download.html

    使用

    from pyecharts import options as opts
    from pyecharts.charts import Bar
    from pyecharts.render import make_snapshot
    
    from snapshot_phantomjs import 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
    
    make_snapshot(snapshot, bar_chart().render(), "bar0.png")

    从此,我过上了高枕无忧的生活……

    不过,好景不长。过了一段高枕无忧的生活之后,日报就不发了。不过我依然我行我素,完全不考虑各位领导的感受。(其实是没时间)
    最近,我有条件了,开始排查……发现这次日报的报错,我根本无从下手。不管是咨询资深的聪兄,还是资浅的辉明。我都是一筹莫展。作为一名资深的搬运工,我最擅长的是换过几种渲染的方式,和几台linux服务器,几个版本的Python,而不是从源码里面追诉问题。不过,意料之中,报错始终如一。

    Traceback (most recent call last):
    File "/root/snapshot-phantomjs_test.py", line 19, in <module>
    make_snapshot(snapshot, bar_chart().render(), "bar0.png")
    File "/usr/local/lib/python3.9/site-packages/pyecharts/render/snapshot.py", line 45, in make_snapshot
    raise OSError(content_array)
    OSError: ["ReferenceError: Can't find variable: echarts\n\n file:////root/render.html:12 in global code\nReferenceError: Can't find variable: echarts\n\n undefined:1\nnull\n"]


    在顶着来自各级领导的层层压力之下,我只能出绝招。百度一下。果然,全球人民还是一条心的,难得有几个遇到这个问题的人,都是说把 echarts.min.js 下载在本地,改代码的引用方式就可以了。不过因为这个鬼东西

    https://assets.pyecharts.org/assets/echarts.min.js

    我确实能访问到,大家都可以,不限种族肤色。可是当我相信的时候,下载下来,改了路径。我想要的图片就呼啦啦的出来了。此时,热泪盈眶~

    wget https://assets.pyecharts.org/assets/echarts.min.js

    下载到root的家目录,/root

    定义一下,

    file_path = "{}/".format(os.path.dirname(os.path.abspath("/root/echarts.min.js")))

    再定义函数的调用

    Bar(init_opts=opts.InitOpts(js_host=file_path))

    电脑忽传图片成,初闻涕泪满衣裳。
    却看时间早下班,慢关电脑喜欲狂。
    白日放歌须纵酒,所以只能到晚上。
    即从步行等公交,便下凌塘向饭堂。



  • 相关阅读:
    调用百度地图API添加点聚合时,marker标注的label标签刷新丢失问题
    redis--基本命令
    centos8安装redis6.0.5
    centos8更改镜像源
    centos8重启网络服务
    搭建eureka高可用
    html5图片缩放后上传blob
    mysql主从复制
    zTree
    datetimepicker使用总结
  • 原文地址:https://www.cnblogs.com/hodge01/p/15742492.html
Copyright © 2020-2023  润新知