本文档记录了如何使用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图片格式相关推荐

  1. Origin绘制双Y轴图的方法

    原文地址为: Origin绘制双Y轴图的方法 1.已有数据绘图如下,其中网络流量的单位是M Bytes/s,与另外两组数据的单位(时间)不同,现在要为其添加右侧Y轴. 2.首先选中该图像,找到工具条, ...

  2. pythonmysql数据分析 tableau_python执行mysql 计算复购率+pyechart+Excel+Tableau绘制双Y轴图...

    现有某超市的订单数据,内容如下: 先求每个会员在每个月的订单数 sql = ''' -- select MemberID, count(SheetID) AS 每个会员的订单数,substring(S ...

  3. 六一双倍的快乐:ggplot2绘制双y轴图

    生信交流与合作请关注公众号@生信探索 双y轴图的目的,是想要在同一坐标系中画两组数据,但是他们值范围差很多,比如一组数据是1-10,另一组是10-100,那么可以对第一组数据做数据变化,比如第一组数据 ...

  4. Python数据分析第十课:绘制双Y轴和改变坐标轴默认显示方式

    前面我们学习了Matplotlib的绘图流程和常用设置以及常见统计图的绘制方法. 同时,我们也发现Matplotlib绘制出的图形中会存在一些问题,例如:如何绘制双Y轴坐标系?如何去掉图形默认的边框? ...

  5. 可视化篇(四)——— python绘制双y轴、箱线图、概率分布三种图形及案例

    可视化篇(四)--- python绘制双y轴.箱线图.概率分布三种图形及案例 摘要 绘制双y轴图形 绘制箱线图 绘制概率分布图 摘要 本文演示了如何通过python绘制双y轴.箱线图.概率分布三种图形 ...

  6. origin如何绘制双y轴曲线_Origin用矩阵绘制多层曲面映射图

    点击上方关注点击下方点赞 [导读]怎样绘制多曲面映射图?1.矩阵数据的准备 1.1 XYYYY型数据 我们在实验中得到一张Excel表格 一列X表示电场强度,负载量不同的多列Y又分为Pm.Pr两组.那 ...

  7. echarts折线图y轴根据数值自动_Python matplotlib 绘制双Y轴曲线图的示例代码

    双X轴的 可以理解为共享y轴 ax1=ax.twiny() ax1=plt.twiny() 双Y轴的 可以理解为共享x轴 ax1=ax.twinx() ax1=plt.twinx() 自动生成一个例子 ...

  8. python双坐标轴箱线图,python绘制双y轴、箱线图、概率分布三种图形及案例

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 本文演示了如何通过python绘制双y轴.箱线图.概率分布三种图形,并给出了具体案例源代码供 ...

  9. origin如何绘制双y轴曲线_Origin对曲线进行多峰拟合

    点击上方关注点击下方点赞 ORIGIN教程 Origin对任意曲线进行多峰拟合 01 数据表 我们以11B NMR 核磁共振谱数据为例. 02 多峰拟合 为了增加教程的可参考性,本文以目前常用的最低版 ...

最新文章

  1. jquery ajax下拉联动,jQuery Ajax MVC 下拉框联动
  2. 代码恒久远,GitHub 永流传!
  3. python数据分析神器_牛逼啊!一个随时随地写Python代码的神器
  4. android应用程序的组成部分
  5. 单链表删除所有值为x的元素_C/C++编程笔记:如何使用C++实现单链表?单链表的基本定义...
  6. “许巍日”新歌提前曝光 《爱如少年》10/15温暖登场!
  7. SSM项目使用GoEasy 获取客户端上下线实时状态变化及在线客户列表
  8. Android 沙箱开源,Android Sandbox(沙箱)开源工具介绍
  9. 最新ui设计趋势_10个最新且有希望的UI设计趋势
  10. 真人拳皇项目第六次Scrum总结——史经浩
  11. Bootstrap 3 移除输入框聚焦线 How to remove border (outline) around text/input boxes?
  12. OpenWares | Open Source and Free Matters » 为rm命令增加回收站功能
  13. AD域中组织单位和组的区别
  14. 技术选择真的没有那么重要
  15. ps画画模糊笔刷_如何用笔刷做出大神级效果?1000多款PS插画笔刷,简直就是你想要的神器...
  16. Android Studio实现一个新闻APP
  17. ios中input输入无效
  18. 迅雷 iOS 版终于复活,不限速,完美支持BT磁力下载
  19. 如何才能做好短线交易?这三点你要知道!
  20. aardio匹配问题以及编码问题

热门文章

  1. Python中http请求方法库汇总
  2. Excel_提取某一列的汉字拼音首字母
  3. 虚拟机出现内部错误解决方法
  4. Misdirection
  5. mem.h是C语言头文件吗,说那个“mem.h”头文件打不开 怎么改啊 高手们帮帮忙
  6. RS485总线防雷保护方案
  7. C语言练习实例——排序
  8. 2012年5月份.计划
  9. html and css3 实现分屏设计-网页前端设计 id1086
  10. Elasticsearch数据采集解决方案