最近想用pyecharts畫節點之間的關係圖,看了pyecharts官網上的關係圖示例後就開始迫不及待的跑demo了,但發現demo的輸出是html文件,而我需要將關係圖批量的輸出爲圖片,於是就開始各種查資料,找pyecharts輸出爲圖片的方法,看了很多資料,安裝好幾個python包,但那個demo還是沒有跑通。最後實在沒辦法又回到官網來尋找資料,沒想到踏破鐵鞋無覓處,得來全不費工夫!官網上已經總結好了這個問題的解決方案。
pyecharts 提供了 selenium
和 phantomjs
兩種方式。
第一種方法需要安裝snapshot-selenium,並且需要做一些其他的配置。(snapshot-selenium 是 pyecharts + selenium 渲染圖片的擴展,使用 selenium 需要配置 browser driver,這部分可以參考 selenium-python 相關介紹,推薦使用 Chrome 瀏覽器,可以開啓 headless 模式。目前支持 Chrome, Safari。)
pip install snapshot-selenium
第二種方法需要安裝snapshot-phantomjs。(snapshot-phantomjs 是 pyecharts + phantomjs 渲染圖片的擴展,需要先安裝 phantomjs,安裝方法請參照官網 phantomjs.org/download.html。)
pip install snapshot-phantomjs
在這裏只介紹第二種方法,因爲第一種方法的配置比較複雜,我嘗試了,但是沒有成功,可能是有些東西配置的有問題。
使用示例
from pyecharts import options as opts
from pyecharts.charts import Graph, Page
from pyecharts.render import make_snapshot
from snapshot_phantomjs import snapshot
def graph_base() -> Graph:
nodes = [
{"name": "結點1", "symbolSize": 10},
{"name": "結點2", "symbolSize": 20},
{"name": "結點3", "symbolSize": 30},
{"name": "結點4", "symbolSize": 40},
{"name": "結點5", "symbolSize": 50},
{"name": "結點6", "symbolSize": 40},
{"name": "結點7", "symbolSize": 30},
{"name": "結點8", "symbolSize": 20},
]
links = []
for i in nodes:
for j in nodes:
links.append({"source": i.get("name"), "target": j.get("name")})
c = (
Graph()
.add("", nodes, links, repulsion=8000)
.set_global_opts(title_opts=opts.TitleOpts(title="Graph-基本示例"))
)
return c
def main():
g = graph_base()
make_snapshot(snapshot, g.render(), "nodes0.png")
if __name__ == "__main__":
main()
輸出結果