如何使用MatPlotLib绘制出具有两个 Y 轴的曲线图?
简 介: 本文给出了利用Matplotlib中的 twinx() 完成同一个图表中绘制具有两个 Y-轴的曲线。绘制每一个曲线的方法与普通的Plot没有什么两样。
关键词
: matplotlib,双Y轴
§01 两个Y轴
1.1 为什么需要两个Y轴?
在有的时候,需要在一张图上绘制出具有两个Y轴的曲线,这是为:
- 绘制的两个数据曲线具有不同的物理量纲和取值范围,如果使用一个Y轴的比例,这两个曲线在尺度相差过大,使得其中一个分辨不清楚;
- 绘制在一起主要为便于对比两个曲线,相比绘制在两个子图中更加明显。
在博文 How to Create a Matplotlib Plot with Two Y Axes 给出了绘制方法描述,下面进行测试以备之后使用之需。
1.2 绘制示例
使用 twinx() 函数绘制带有两个Y轴的曲线图非常容易。下面 示例演示如何是踹死 Matplotlib
绘制带有两个 Y 轴的图标。
1.2.1 例程:创建带有两个Y轴的Matplotlib
首先,为了演示,假设我们有两个pandas DataFrames:
import pandas as pd
#create DataFrames
df1 = pd.DataFrame({'year': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'sales': [14, 16, 19, 22, 24, 25, 24, 24, 27, 30]})
df2 = pd.DataFrame({'year': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'leads': [4, 4, 4, 5, 4, 5, 7, 8, 5, 3]})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
df1: year sales
0 1 14
1 2 16
2 3 19
3 4 22
4 5 24
5 6 25
6 7 24
7 8 24
8 9 27
9 10 30
df2: year leads
0 1 4
1 2 4
2 3 4
3 4 5
4 5 4
5 6 5
6 7 7
7 8 8
8 9 5
9 10 3
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
这两个数据都有 “year” 变量,从1 变化到 10, 第一个数据是表示每年的销售总额,第二个则显示每一年的销售总额。
下面的代码可以创建一个Matplotlib的图表来显示两个数据,具有两个 Y 轴分别表示两个数据曲线。
import matplotlib.pyplot as plt
#define colors to use
col1 = 'steelblue'
col2 = 'red'
#define subplots
fig,ax = plt.subplots()
#add first line to plot
ax.plot(df1.year, df1.sales, color=col1)
#add x-axis label
ax.set_xlabel('Year', fontsize=14)
#add y-axis label
ax.set_ylabel('Sales', color=col1, fontsize=16)
#define second y-axis that shares x-axis with current plot
ax2 = ax.twinx()
#add second line to plot
ax2.plot(df2.year, df2.leads, color=col2)
#add second y-axis label
ax2.set_ylabel('Leads', color=col2, fontsize=16)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
▲ 图1.2.1 绘制的图表结果
左边的 y-轴显示了每一年总销售量;右边的y-轴显示销售的潜在客户数据。蓝线表示的每年的销售总额,红色则表示每年的销售客户。
1.2.2 改变曲线特性
可以使用 marker 和 linewidth 参数来方便改变图表中曲线的外观。
import matplotlib.pyplot as plt
#define colors to use
col1 = 'steelblue'
col2 = 'red'
#define subplots
fig,ax = plt.subplots()
#add first line to plot
ax.plot(df1.year, df1.sales, color=col1, marker='o', linewidth=3)
#add x-axis label
ax.set_xlabel('Year', fontsize=14)
#add y-axis label
ax.set_ylabel('Sales', color=col1, fontsize=16)
#define second y-axis that shares x-axis with current plot
ax2 = ax.twinx()
#add second line to plot
ax2.plot(df2.year, df2.leads, color=col2, marker='o', linewidth=3)
#add second y-axis label
ax2.set_ylabel('Leads', color=col2, fontsize=16)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
▲ 图1.2.2 使用曲线marker,linewidth进行修改曲线特性的图表
上图中使用 marker=‘o’ 使得单个数据点更加凸显。
※ 总 结 ※
本文给出了利用Matplotlib中的 twinx() 完成同一个图表中绘制具有两个 Y-轴的曲线。绘制每一个曲线的方法与普通的Plot没有什么两样。
▲ 图2.1 增加Grid的形式
col1 = 'steelblue'
col2 = 'red'
plt.figure(figsize=(10,6))
plt.grid(True)
fig,ax = plt.subplots()
ax.plot(df1.year, df1.sales, color=col1, marker='o', linewidth=3)
ax.set_xlabel('Year', fontsize=14)
ax.set_ylabel('Sales', color=col1, fontsize=14)
plt.grid(True)
ax2 = ax.twinx()
ax2.plot(df2.year, df2.leads, color=col2, marker='o', linewidth=3)
ax2.set_ylabel('Leads', color=col2, fontsize=16)
plt.tight_layout()
plt.savefig(r"d:\temp\figure1.jpg")
plt.close()
tspshowimage(image=r"d:\temp\figure1.jpg")
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
2.1 补充资源
下面的指导博文给出更多其他Matplotlib有用的特性。
- How to Adjust Axis Label Position in Matplotlib
- How to Set Axis Ranges in Matplotlib
- How to Set X-Axis Values in Matplotlib
补充内容
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
t = linspace(0, 20, 1000)
sint = sin(t)
cost = cos(t)
col1 = 'steelblue'
col2 = 'red'
plt.figure(figsize=(10,6))
plt.plot(t, sint, color=col1, linewidth=1)
plt.xlabel('Time', fontsize=14)
plt.ylabel('Value', color=col1, fontsize=14)
plt.grid(True)
ax2 = plt.twinx()
ax2.plot(t, cost, color=col2, linewidth=1)
ax2.set_ylabel('Value', color=col2, fontsize=16)
plt.tight_layout()
plt.savefig('/home/aistudio/stdout.jpg')
plt.show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
▲ 图2.2.1 绘制示例图
■ 相关文献链接:
- How to Create a Matplotlib Plot with Two Y Axes
- twinx()
- How to Adjust Axis Label Position in Matplotlib
- How to Set Axis Ranges in Matplotlib
- How to Set X-Axis Values in Matplotlib
● 相关图表链接:
文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。
原文链接:zhuoqing.blog.csdn.net/article/details/122781545
- 点赞
- 收藏
- 关注作者
评论(0)