pyecharts画桑基图,保存为html和png问题

pyecharts画桑基图

怎么安装所需要的资源,可以参见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')

html打开异常,寻求png方式

遇到问题:html打开异常

图形如下,但是很奇怪,在浏览器不打开的情况下,我运行程序,就只会跳出来一个空页面,啥都没有。system打开html时,使用的是默认浏览器,而我保存的html用IE本身也打不开。把默认浏览器修改为谷歌浏览器后,在谷歌浏览器动情况下,能打开,关掉后,就只有空包页面了。无解。只能想其他办法:转为png或者jpg吧。
pyecharts画桑基图,保存为html和png问题_第1张图片

桑基图保存为png格式

想把它保存为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。

解决桑基图保存png报错问题

查看谷歌浏览器的版本

打开浏览器,搜索栏输入“about:version”可以看到版本号。或者直接点右边那三个小点,打开谷歌浏览器的选项设置卡,也可以知道版本号。

下载chromedriver.exe

谷歌浏览器下载地址http://npm.taobao.org/mirrors/chromedriver/

把EXE放在两个位置

1、和chrome.exe一个位置:C:\Program Files\Google\Chrome\Application
2、和python编译器一个位置:

浏览器版本之间的区别https://blog.csdn.net/weixin_41990913/article/details/90936149

添加谷歌浏览器的环境变量

遇到问题

遇到warning和error信息,大致是浏览器配置的不正确
pyecharts画桑基图,保存为html和png问题_第2张图片
找个几个关于此文章的博客,通过第一个博主的办法暂时解决了找个问题。不过要更改浏览器的默认选项。不是很推荐。
修改下载的.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文件。

方法二:改成mock的形式进行解决

参考
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
其他参考信息

你可能感兴趣的:(python,python)