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 相关文章推荐
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
Python运算符重载详解及实例代码
Mar 07 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
详解python算法之冒泡排序
Mar 05 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 Python
Python装饰器的应用场景代码总结
Apr 10 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
python中wx模块的具体使用方法
May 15 Python
基于Python和C++实现删除链表的节点
Jul 06 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
用python计算文件的MD5值
Dec 23 Python
python前后端自定义分页器
Apr 13 #Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
You might like
PHP初学者头疼问题总结
2006/07/08 PHP
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
JS中正则表达式要注意lastIndex属性
2017/08/08 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
Python单例模式实例分析
2015/01/14 Python
Python入门教程之if语句的用法
2015/05/14 Python
Python正规则表达式学习指南
2016/08/02 Python
快速了解Python中的装饰器
2018/01/11 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
python利用tkinter实现屏保
2019/07/30 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
基于python 取余问题(%)详解
2020/06/03 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
高级人员简历的自我评价分享
2013/11/03 职场文书
演讲稿怎么写
2014/01/07 职场文书
活动总结模板
2014/05/09 职场文书
文化建设工作方案
2014/05/12 职场文书
法学院毕业生求职信
2014/06/25 职场文书
小学教师读书活动总结
2014/07/08 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
SQL Server使用导出向导功能
2022/04/08 SQL Server