以前用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))
電腦忽傳圖片成,初聞涕淚滿衣裳。
卻看時間早下班,慢關電腦喜欲狂。
白日放歌須縱酒,所以只能到晚上。
即從步行等公交,便下凌塘向飯堂。