怎么安装所需要的资源,可以参见https://blog.csdn.net/snwang_miss/article/details/117804005。
按照教程画桑基图,发现只能保存为html类型,代码如下:
import os
import pandas as pd
from pyecharts.charts import Page, Sankey, Funnel
from pyecharts import options as opts
#nodes需要包含所有的节点信息
nodes =[{'name': '总节点'},
{'name': '节点左1'},
{'name': '节点左2'},
{'name': '节点左3'},
{'name': '节点右1'},
{'name': '节点右2'},
{'name': '节点右3'},
{'name': '节点右4'}]
#links按照源节点,目标节点,数量的顺序排放
links =[{'source': '总节点', 'target': '节点左1', 'value': 74},
{'source': '总节点', 'target': '节点左2', 'value': 17},
{'source': '总节点', 'target': '节点左3', 'value': 88},
{'source': '节点左1', 'target': '节点右1', 'value': 34},
{'source': '节点左1', 'target': '节点右3', 'value': 25},
{'source': '节点左1', 'target': '节点右2', 'value': 15},
{'source': '节点左2', 'target': '节点右1', 'value': 17},
{'source': '节点左3', 'target': '节点右2', 'value': 44},
{'source': '节点左3', 'target': '节点右3', 'value': 44},]
pic = (
Sankey()
.add("",
nodes,
links,
linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source",type_="dotted"),
label_opts=opts.LabelOpts(position="right",),)
.set_global_opts(title_opts=opts.TitleOpts("桑基图"))
)
pic.render('problem.html')
os.system('problem.html')
图形如下,但是很奇怪,在浏览器不打开的情况下,我运行程序,就只会跳出来一个空页面,啥都没有。system打开html时,使用的是默认浏览器,而我保存的html用IE本身也打不开。把默认浏览器修改为谷歌浏览器后,在谷歌浏览器动情况下,能打开,关掉后,就只有空包页面了。无解。只能想其他办法:转为png或者jpg吧。
想把它保存为png格式,于是装了snapshot_selenium。安装方式就是cmd直接输入 pip install snapshot_selenium
然后敲代码运行:
import os
import pandas as pd
from pyecharts.charts import Page, Sankey, Funnel
from pyecharts import options as opts
# 导入输出图片工具
from pyecharts.render import make_snapshot
# 使用snapshot-selenium 渲染图片
from snapshot_selenium import snapshot
#nodes需要包含所有的节点信息
nodes =[{'name': '总节点'},
{'name': '节点左1'},
{'name': '节点左2'},
{'name': '节点左3'},
{'name': '节点右1'},
{'name': '节点右2'},
{'name': '节点右3'},
{'name': '节点右4'}]
links =[{'source': '总节点', 'target': '节点左1', 'value': 74},
{'source': '总节点', 'target': '节点左2', 'value': 17},
{'source': '总节点', 'target': '节点左3', 'value': 88},
{'source': '节点左1', 'target': '节点右1', 'value': 34},
{'source': '节点左1', 'target': '节点右3', 'value': 25},
{'source': '节点左1', 'target': '节点右2', 'value': 15},
{'source': '节点左2', 'target': '节点右1', 'value': 17},
{'source': '节点左3', 'target': '节点右2', 'value': 44},
{'source': '节点左3', 'target': '节点右3', 'value': 44},]
def funnel_base() -> Funnel:
pic = (
Sankey()
.add("",
nodes,
links,
linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source",type_="dotted"),
label_opts=opts.LabelOpts(position="right",),)
.set_global_opts(title_opts=opts.TitleOpts(title="问题类别桑基图"))
)
return pic
funnel = funnel_base()
make_snapshot(snapshot, funnel.render(),'problem.png')
报错如下:
Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
缺少谷歌浏览器的驱动chromedriver.exe。
打开浏览器,搜索栏输入“about:version”可以看到版本号。或者直接点右边那三个小点,打开谷歌浏览器的选项设置卡,也可以知道版本号。
谷歌浏览器下载地址http://npm.taobao.org/mirrors/chromedriver/
1、和chrome.exe一个位置:C:\Program Files\Google\Chrome\Application
2、和python编译器一个位置:
浏览器版本之间的区别https://blog.csdn.net/weixin_41990913/article/details/90936149
遇到warning和error信息,大致是浏览器配置的不正确
找个几个关于此文章的博客,通过第一个博主的办法暂时解决了找个问题。不过要更改浏览器的默认选项。不是很推荐。
修改下载的.py链接:https://blog.csdn.net/mmmaaaggg/article/details/105305669
方法:找到C:\ProgramData\Anaconda3\Lib\site-packages\snapshot_selenium\snapshot.py,然后修改55行
# 原snapshot自带的代码
#def get_chrome_driver():
#options = webdriver.ChromeOptions()
#options.add_argument("headless")
#return webdriver.Chrome(options=options)
修改后
# 根据https://blog.csdn.net/mmmaaaggg/article/details/105305669修改后的
def get_chrome_driver():
options = webdriver.ChromeOptions()
options.add_argument("headless")
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
return webdriver.Chrome(options=options)
修改后,可以正常生成png文件。
参考
snapshot_selenium报错处理 - 简书https://www.jianshu.com/p/549c101d42b4
#最后的保存png修改为
from unittest import mock
def get_chrome_driver():
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("headless")
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
return webdriver.Chrome(options=options)
#........中间你的代码.........
with mock.patch('snapshot_selenium.snapshot.get_chrome_driver', get_chrome_driver):
# 需要安装 snapshot-selenium
make_snapshot(driver, bar_chart().render(), "bar.png")
后面准备参考下面的博客,看是否可以手动修改option而不动原py文件。
关于浏览器的设置问题https://blog.csdn.net/xc_zhou/article/details/82415870
其他参考信息