pyecharts绘制双y轴图并将html文件转为png图片格式
本文档记录了如何使用python中pyecharts绘制双纵坐标图,并将输出的html文件转为png等图片格式。
0 背景
项目中需要绘制双纵坐标图,在网上调研之后,发现使用pyecharts绘制起来更方便,且看上去还挺美观,果断抄作业~
【当然,强大的excel也能绘制,但是整个项目的数据处理过程都在python中,所以你懂得~】
后续制作分析报告时,需要使用图片格式数据,但是pyecharts输出的是html文件,前期懒省事,制作分析报告时都是采用将html文件截图生成图片的方式,如果是一两个图片就还行。。。。凡事都有但是,当这个工作变成持续大量的时候,就会觉得有点恶心。。。于是乎,痛下决心,解决一下这个需求。
1 双坐标
简单介绍一下项目中所涉及的双纵坐标图长什么样,假设数据如下:
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] label1 = [100, 100, 36, 20, 10, 10] label2 = [round(i / sum(label1) * 100, 2) for i in label1] # label2: [36.23, 36.23, 13.04, 7.25, 3.62, 3.62]
横坐标表示不同类型的衣服,左纵坐标表示衣服数量,右纵坐标表示衣服数量占比。
话不多说,代码展示:
from pyecharts.charts import Line, Bar from pyecharts.globals import ThemeType from pyecharts import options as opts def overlap_bar_line(x, y1, y2, title) -> Bar:bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) # 初始化柱状图,并设置主题.add_xaxis(x) # 设置横坐标.add_yaxis("数量", y1, bar_width=20) # 设置左纵坐标.extend_axis(yaxis=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value}%"), interval=5)) # 增加右纵坐标设置.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 柱状图上的数字是否显示.set_global_opts(title_opts=opts.TitleOpts(title=title),yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value}")),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=True, position="top", color="pink", rotate=15, interval=0)),) # 整体格式设置)line = (Line().add_xaxis(x).add_yaxis("总数量占比", y2, yaxis_index=1, z_level=1)) # 增加右纵坐标数值 bar.overlap(line) return bar overlap_bar_line(attr, label1, label2, "双坐标图示例").render("test.html")
代码运行成功后,会在项目所在文件夹下生成test.html文件,绘制的结果如下所示:
2 图片格式转换
如何将html文件转换为png等图片格式呢,在网上调研之后,主要参考:
PyEcharts输出保存图片的多种方法_Python美丽星球--微信(Felixzfb)-CSDN博客
这篇博客中提到的方法1,但是中间出了点小插曲,下面记录一下bug和解决方法。
先说下我的环境吧,
mac 10.15.4 python 3.7.6 pyecharts==1.8.1 谷歌浏览器版本:91.0.4472.77 且谷歌浏览器受内网严格控制。
话不多说,也是先上实现的代码,
from pyecharts.render import make_snapshot from snapshot_selenium import snapshot # 修改了源码,更改chromedriver的地址 make_snapshot(snapshot, overlap_bar_line(attr, label1, label2, "双坐标图示例").render(), "test.png" )
如果代码运行成功,会在项目所在路径生成名为test.png的图片,就是我想要的!
函数make_snapshot的第二个参数我用的是自定义的绘制双纵坐标的函数产生的文件,可以改成自己的。
第三个参数是你想要生成的图片格式和名字,后缀可以使用下列形式【make_snapshot源码中设置的】:
PNG_FORMAT = "png" JPG_FORMAT = "jpeg" GIF_FORMAT = "gif" PDF_FORMAT = "pdf" SVG_FORMAT = "svg" EPS_FORMAT = "eps" B64_FORMAT = "base64"
3 实现细节
下面开始说一下,在代码成功运行之前需要做的步骤:
按照博客中提到的方法步骤,首先进行:
pip install snapshot-selenium
我下载的版本是snapshot-selenium==0.0.2
随后,要下载谷歌驱动器chromedriver,网址:ChromeDriver - WebDriver for Chrome - Downloads 下载与你浏览器差不多对应的版本,我下载的是:ChromeDriver 91.0.4472.101
但是在代码调用chromedriver时出现了小插曲,一直出现下面的错误:
json Message: ‘chromedriver’ executable needs to be in PATH.
我先后采用了博客中提到的方法:
(1)将chromedriver添加到系统路径中
我参考是的这两篇博客:
Mac下chromedriver安装配置_YooHoeh的博客-CSDN博客
Mac 安装Chromedriver及配置_Python之家-CSDN博客
【不起作用,公司电脑我没有权限操作系统变量,我只能操作个人Applications下的内容,但是我把chromedriver放到个人Applications下,再将其添加到系统路径中时,在调用的时候还是找不到。。。哪位大神若是知道解决办法也可告知我啊。。。】
卒
(2)将chromedriver放在项目文件所在的文件夹下
博客中提到他采用这种方法解决了,无奈我还是不行啊,我连试了两个项目,都不奏效,还是上面那个错误。。。【我在个人电脑windows系统下,不受外网限制,试了这种方法,已经凑效,下面的内容可以忽略了。。。】
卒
(3)第三种方法!手动指定chromedriver的位置
强烈推荐这个参考网址:
https://www.roelpeters.be/solve-message-chromedriver-executable-neneeds-to-be-in-path/
自己要是早点发现这个就好了!或许我可以多一点摸鱼的时间~
怎么指定?
首先定位到 snapshot_selenium.snapshot.py 文件中的 get_chrome_driver() 函数:
def get_chrome_driver():options = webdriver.ChromeOptions()options.add_argument("headless")return webdriver.Chrome(executable_path="/Users/chromedriver",options=options,) # add path
在webdriver.Chrome()中,将executable_path设置成你自己下载的解压后的chromedriver的位置,完成!
小贴士:在运行代码时,我需要将网络切换到外网,内网限制下程序会一直停在那里,猜测是加载不出来谷歌,我可真是太难了!
4 其他
一开始尝试的是博客中提到的方法2,参考的是:
将pyecharts生成的网页保存为图像格式的方法(2020.3)_snail82的博客-CSDN博客
确实要复杂点,但是没解决我的问题,就。。。这样吧!
5 总结
本文档整体上记录了使用pyecharts绘制双纵坐标图以及转换为png等图片格式的方法。
如有问题,不吝赐教。
pyecharts绘制双y轴图并将html文件转为png图片格式相关推荐
- Origin绘制双Y轴图的方法
原文地址为: Origin绘制双Y轴图的方法 1.已有数据绘图如下,其中网络流量的单位是M Bytes/s,与另外两组数据的单位(时间)不同,现在要为其添加右侧Y轴. 2.首先选中该图像,找到工具条, ...
- pythonmysql数据分析 tableau_python执行mysql 计算复购率+pyechart+Excel+Tableau绘制双Y轴图...
现有某超市的订单数据,内容如下: 先求每个会员在每个月的订单数 sql = ''' -- select MemberID, count(SheetID) AS 每个会员的订单数,substring(S ...
- 六一双倍的快乐:ggplot2绘制双y轴图
生信交流与合作请关注公众号@生信探索 双y轴图的目的,是想要在同一坐标系中画两组数据,但是他们值范围差很多,比如一组数据是1-10,另一组是10-100,那么可以对第一组数据做数据变化,比如第一组数据 ...
- Python数据分析第十课:绘制双Y轴和改变坐标轴默认显示方式
前面我们学习了Matplotlib的绘图流程和常用设置以及常见统计图的绘制方法. 同时,我们也发现Matplotlib绘制出的图形中会存在一些问题,例如:如何绘制双Y轴坐标系?如何去掉图形默认的边框? ...
- 可视化篇(四)——— python绘制双y轴、箱线图、概率分布三种图形及案例
可视化篇(四)--- python绘制双y轴.箱线图.概率分布三种图形及案例 摘要 绘制双y轴图形 绘制箱线图 绘制概率分布图 摘要 本文演示了如何通过python绘制双y轴.箱线图.概率分布三种图形 ...
- origin如何绘制双y轴曲线_Origin用矩阵绘制多层曲面映射图
点击上方关注点击下方点赞 [导读]怎样绘制多曲面映射图?1.矩阵数据的准备 1.1 XYYYY型数据 我们在实验中得到一张Excel表格 一列X表示电场强度,负载量不同的多列Y又分为Pm.Pr两组.那 ...
- echarts折线图y轴根据数值自动_Python matplotlib 绘制双Y轴曲线图的示例代码
双X轴的 可以理解为共享y轴 ax1=ax.twiny() ax1=plt.twiny() 双Y轴的 可以理解为共享x轴 ax1=ax.twinx() ax1=plt.twinx() 自动生成一个例子 ...
- python双坐标轴箱线图,python绘制双y轴、箱线图、概率分布三种图形及案例
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 本文演示了如何通过python绘制双y轴.箱线图.概率分布三种图形,并给出了具体案例源代码供 ...
- origin如何绘制双y轴曲线_Origin对曲线进行多峰拟合
点击上方关注点击下方点赞 ORIGIN教程 Origin对任意曲线进行多峰拟合 01 数据表 我们以11B NMR 核磁共振谱数据为例. 02 多峰拟合 为了增加教程的可参考性,本文以目前常用的最低版 ...
最新文章
- jquery ajax下拉联动,jQuery Ajax MVC 下拉框联动
- 代码恒久远,GitHub 永流传!
- python数据分析神器_牛逼啊!一个随时随地写Python代码的神器
- android应用程序的组成部分
- 单链表删除所有值为x的元素_C/C++编程笔记:如何使用C++实现单链表?单链表的基本定义...
- “许巍日”新歌提前曝光 《爱如少年》10/15温暖登场!
- SSM项目使用GoEasy 获取客户端上下线实时状态变化及在线客户列表
- Android 沙箱开源,Android Sandbox(沙箱)开源工具介绍
- 最新ui设计趋势_10个最新且有希望的UI设计趋势
- 真人拳皇项目第六次Scrum总结——史经浩
- Bootstrap 3 移除输入框聚焦线 How to remove border (outline) around text/input boxes?
- OpenWares | Open Source and Free Matters » 为rm命令增加回收站功能
- AD域中组织单位和组的区别
- 技术选择真的没有那么重要
- ps画画模糊笔刷_如何用笔刷做出大神级效果?1000多款PS插画笔刷,简直就是你想要的神器...
- Android Studio实现一个新闻APP
- ios中input输入无效
- 迅雷 iOS 版终于复活,不限速,完美支持BT磁力下载
- 如何才能做好短线交易?这三点你要知道!
- aardio匹配问题以及编码问题