最近想用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()
输出结果