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 相关文章推荐
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
python:接口间数据传递与调用方法
Dec 17 Python
使用Python3内置文档高效学习以及官方中文文档
May 19 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
Oct 24 Python
Python中os模块功能与用法详解
Feb 26 Python
python实现拼接图片
Mar 23 Python
Python 防止死锁的方法
Jul 29 Python
pytorch 实现在测试的时候启用dropout
May 27 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
Python中基础数据类型 set集合知识点总结
Aug 02 Python
python前后端自定义分页器
Apr 13 #Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
You might like
PHP 高手之路(二)
2006/10/09 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
PDO::_construct讲解
2019/01/27 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
javaScript复制功能调用实现方案
2012/12/13 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
JsRender for object语法简介
2014/10/31 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
如何在python中使用selenium的示例
2017/12/26 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
高性能装备提升营地:Kammok
2019/02/27 全球购物
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
爱心捐款倡议书范文
2014/05/12 职场文书
维修工先进事迹
2014/05/29 职场文书
参赛口号
2014/06/16 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
委托书范本
2014/09/13 职场文书
初中生物教学反思
2016/02/20 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
Java数据结构之链表相关知识总结
2021/06/18 Java/Android
HTML中的表格元素介绍
2022/02/28 HTML / CSS