參考一
關鍵:使用 pyecharts-snapshot插件
第一步:安裝phantomjs
打開系統命令行,鍵入下列代碼:
npm install -g phantomjs-prebuilt
第二步:安裝了 Nodejs 環境
下載鏈接:https://nodejs.org/en/download/
第三步:安裝 pyecharts-snapshot
pip install pyecharts-snapshot
第四步:重啟計算機,render(path=“”)的輸出路徑和格式即可
參考二
pyecharts生成的網頁圖像如果直接截圖,圖片分辨率較低,不適合用於演示。因此可以考慮將其轉換為jpg等格式使用。網上搜到的大部分采用pyecharts-snapshot方式來進行轉換。通常的方法是:
(1)安裝phantomjs (下載地址:http://phantomjs.org/download.html),這個版本相對固定,一般不需考慮版本問題。
(2)安裝node.js (我的電腦上一直裝有node.js,因此不確定該安裝是否必須) https://nodejs.org/en/download/
(3)安裝pyecharts-snapshot
pip install pyecharts-snapshot
(4)使用snapshot進行轉換
from pyecharts import Line, Pie, Grid from pyecharts_snapshot.main import make_a_snapshot attr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"] v1 = [5, 20, 36, 10, 10, 100] v2 = [55, 60, 16, 20, 15, 80] line = Line("折線圖示例") line.add("商家A", attr, v1, mark_point=["average"]) line.add("商家B", attr, v2, is_smooth=True, mark_line=["max", "average"]) line.render('test.html') make_a_snapshot('test.html', 'test.pdf')
然而,不幸的是,我照搬這種方法,程序運行沒有任何錯誤提示,但是出現兩個警告信息:
RuntimeWarning: coroutine 'make_a_snapshot' was never awaited
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
然后,沒有寫任何文件!幾經搜索,發現問題出在python版本上,據pyecharts (https://github.com/pyecharts)github社區中明確表示上述方法不支持python3.6 3.7等版本。可以使用snapshot-phantomjs替代。
(萬惡的版本問題,不知道有多少初學者因為版本問題而從入門到放棄了。反正筆者當年安裝keras、TensorFlow等各種版本切換,差點就瘋了。不過堅持下來,會發現多解決一些問題,積累一些經驗,在遇到技術問題,心里就沒有剛開始那么緊張和無助了)。
下面我就直接安裝。因為已經安裝了phantomjs 和node.js了,所以不確定除了phantomjs,是否還需要node.js
(1)還是先安裝snapshot-phantomjs。
pip install snapshot-phantomjs
我是使用的清華鏡像,所以pip install的速度還是飛快的。如果安裝速度慢的,可以考慮使用國內鏡像。 當然,高手也可以直接在GitHub上下載源文件(https://github.com/pyecharts/snapshot-phantomjs)。
(2)當然就是使用了。下面是使用的基本結構:
from snapshot_phantomjs import snapshot from pyecharts.render import make_snapshot make_snapshot(snapshot,"*.html","*.svg")#生成svg圖片
至此,大功告成了。在snapshot.py文件中可以看到,它支持的文件格式有如下幾種。
PNG_FORMAT = "png" JPG_FORMAT = "jpeg" GIF_FORMAT = "gif" PDF_FORMAT = "pdf" SVG_FORMAT = "svg" EPS_FORMAT = "eps" B64_FORMAT = "base64"
因此,在輸出的文件后綴名中,要嚴格按照上面的幾個字符串來寫,不然會有錯誤提示。