Python Matplotlib绘制两个Y轴图像


Posted in Python onApril 13, 2022

双Y轴图简介

 双Y轴图顾名思义就是在一个图里有两个Y轴。这种图形主要用来展示两个因变量和一个自变量的关系并且两个因变量的数值单位还不同。如我们想要展示不同月份公司销业绩以及成本的变化情况这时就可以用双Y轴图来展示。(因变量销量和成本具有不同的单位)。

实现思路

绘制双y轴的思想,也是用到了matplotlib面向对象绘图的思想。在不指定位置的情况下,在一个画布上创建出两个坐标系,其中第一个坐标系正常创建,第二个坐标系则使用专有的twinx()方法创建。

则两个坐标系的位置重合。第一个坐标系轴在左,通过twinx()方法创建出的坐标系则轴在右。因为有了两个y轴,所以再对y轴属性进行操作的时候,则需要面向对象,如果再简单地使用plt.ylabel()等方法,则只能操作到左轴,而影响不到右轴。

下边做一个示例,首先是导包和准备数据,这里准备一组销量数据,并计算其增长率,将其体现在右轴。

实现代码

样式一

具体代码如下:

import matplotlib.pyplot as plt
# 生成一组数据
x = range(7)
y1 = [2000, 1600, 3000, 6200, 7000, 9800, 11000]
y2 = [1]
for i in range(len(y1)):
    if i+1 == len(y1):
        break
    rate = round(y1[i+1]/y1[i] - 1, 2)
    y2.append(rate)

fig = plt.figure(figsize=(10, 8), facecolor='#ff33ff')
# 字体使用楷体
plt.rcParams['font.sans-serif'] = ['STKAITI']
plt.rcParams['axes.unicode_minus'] = False
# 背景色为cc00ff
plt.rcParams['axes.facecolor'] = '#cc00ff'
ax1 = fig.add_subplot(111)
plt.title('销售量及其增长率图示', color='#ffff00', fontsize=25, y=1.04)
plt.xticks(x, ['1月', '2月', '3月', '4月', '5月', '6月', '7月'], color='#ffff00', fontsize=15)
plt.xlabel('月份', color='#ff0033', fontsize=15)
plt.yticks(color='#B22222', fontsize=15)
ax1.bar(x, y1, color='#33ff66', label='left')
ax1.set_ylabel('销售量(件)', color='#66ff00', fontsize=20)
# 增加一条坐标轴
ax2 = ax1.twinx()
ax2.plot(x, y2, color='#3399ff', linestyle='--', marker='o', linewidth=2)
ax2.set_ylabel("增长率", color='#66ff00', fontsize=20)
ax2.tick_params(axis='y', color='green', labelsize=15, labelcolor='#B22222')
for a, b in zip(x, y2):
    plt.text(a, b+0.02, '%.2f' % b, ha='center', va='bottom', fontsize=15, color='red')
plt.show()

图像效果如下图:

Python Matplotlib绘制两个Y轴图像

样式二

具体实现代码如下

%matplotlib inline
import matplotlib.pyplot as plt
import random
import pandas as pd
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['FangSong']  # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
#数据准备
date=["一月","二月","三月","四月","五月","六月","七月","八月"]
sales=[random.randint(10000,25000) for i in range(8)]
cost=[int(i/100)-random.randint(1,20) for i in sales]
df=pd.DataFrame(data={"销量":sales,"成本":cost},index=date)
 
#绘制第一个Y轴
fig=plt.figure(figsize=(20,8),dpi=80)
ax=fig.add_subplot(111)
lin1=ax.plot(df.index,df["销量"],marker="o",label="sales")
ax.set_title("双Y轴图",size=20)
ax.set_xlabel("时间",size=18)
ax.set_ylabel("销量(件)",size=18)
for i,j in df["销量"].items():
    ax.text(i,j+20,str(j),va="bottom",ha="center",size=15)
 
#绘制另一Y轴    
ax1=ax.twinx()
lin2=ax1.plot(df.index,df["成本"],marker="o",color="red",label="cost")
ax1.set_ylabel("成本(元)",size=18)
 
#合并图例
lins=lin1+lin2
labs=[l.get_label() for l in lins]
ax.legend(lins,labs,loc="upper left",fontsize=15)
 
plt.show()

图像效果如下图:

Python Matplotlib绘制两个Y轴图像

到此这篇关于Python+Matplotlib绘制双y轴图像的示例代码的文章就介绍到这了!

Python 相关文章推荐
Python语言编写电脑时间自动同步小工具
Mar 08 Python
Python获取DLL和EXE文件版本号的方法
Mar 10 Python
通过数据库对Django进行删除字段和删除模型的操作
Jul 21 Python
Python导出DBF文件到Excel的方法
Jul 25 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
Python实现基本线性数据结构
Aug 22 Python
python爬虫_微信公众号推送信息爬取的实例
Oct 23 Python
python 基于dlib库的人脸检测的实现
Nov 08 Python
Python使用os.listdir和os.walk获取文件路径
May 21 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 Python
用python实现监控视频人数统计
May 21 Python
python前后端自定义分页器
Apr 13 #Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
You might like
用PHP连接Oracle for NT 远程数据库
2006/10/09 PHP
php header功能的使用
2013/10/28 PHP
php使用GeoIP库实例
2014/06/27 PHP
PHP类的封装与继承详解
2015/09/29 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
json跟xml的对比分析
2008/06/10 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
canvas知识总结
2017/01/25 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
python解析json实例方法
2013/11/19 Python
python实现雨滴下落到地面效果
2018/06/21 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
python 对key为时间的dict排序方法
2018/10/17 Python
python实现简单加密解密机制
2019/03/19 Python
Python assert语句的简单使用示例
2019/07/28 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
毕业生怎样写好自荐信
2013/11/11 职场文书
庆七一活动总结
2014/08/27 职场文书