Matplotlib 同一坐标里显示多条曲线学习了在同一个坐标系里显示多条曲线的功能,里面只有一条X轴和一条Y轴,所有曲线都是根据这两个坐标刻度进行显示的。如果曲线的数据比较接近,就可以采用这种坐标系来显示,如果相差比较远,就不行了。比如温度是0到100度,压力可能是1到10,相差了10倍,再用同样的Y轴来表示,就会导致显示的图形不合比例,看到某一条曲线比较小,看起来不美观。那么怎么样来解决这个问题呢?大家可能都会想到,再添加一条Y轴的坐标轴就可以解决了,但是怎么样在matplotlib里添加多一条Y轴呢?要解决这个问题,就得学习matplotlib的函数twinx(),这个函数就是共享X轴,创建另外一条Y轴的功能。
先来看一下结果的图:
在上图里,左边的Y轴是温度,颜色是蓝色;右边的Y轴是压力,颜色是红色。可以看到两边刻度和数值范围都不一样。蓝色的曲线是根据蓝色的Y轴和X轴来画出来的,而红色的曲线是根据红色的Y轴和X轴来画出来的,所以两个图都会尽可能地把整个绘图区域占满,这样看起来,就比较好看。
在这个例子里,首先定义两条曲线的数据,如下:
x = [20, 40, 60, 80, 100, 120, 140]
T = [30, 50, 30, 46, 70, 43, 80]
P = [1.0, 2.0, 4.0, 6.0, 6.0, 5.5, 7.0]
X轴的数据是x列表,T列表表示温度数据,P列表表示压力数据。
接着下来,系统默认的Y轴用来画时间与温度曲线,代码如下:
plt.plot(x, T, 'b', label = 'Temperature')
plt.scatter(x, T, color = 'b', marker = 's')
plt.xlabel('Time')
plt.ylabel('Temperatur', color = 'b')
plt.tick_params(axis = 'y', labelcolor = 'b')
#图例
plt.legend(loc = 'upper left')
这里先画曲线,接着标记数据点,接着命名X轴的名称,标记Y轴的名称,修改Y轴刻度的颜色,最后显示图例在左上角。
紧接着就是创建右边的Y轴代码:
ax2 = plt.twinx()
这行代码是创建第二Y轴的关键代码,一定要记得输入这行。创建第二Y轴保存在ax2里,接着使用第二Y轴来显示数据,修改刻度的颜色等。
整个例子的代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.figure('deepinout.com 极客笔记')
plt.axis([0, 150, 0, 100])
plt.axis('on')
plt.grid(True)
#定义显示的数据
x = [20, 40, 60, 80, 100, 120, 140]
T = [30, 50, 30, 46, 70, 43, 80]
P = [1.0, 2.0, 4.0, 6.0, 6.0, 5.5, 7.0]
#显示温度与时间曲线
plt.plot(x, T, 'b', label = 'Temperature')
plt.scatter(x, T, color = 'b', marker = 's')
plt.xlabel('Time')
plt.ylabel('Temperatur', color = 'b')
plt.tick_params(axis = 'y', labelcolor = 'b')
#图例
plt.legend(loc = 'upper left')
#显示压力与时间曲线
ax2 = plt.twinx()
ax2.plot(x, P, 'r', label = 'Pressure')
ax2.scatter(x, P, color = 'r', marker = '*', s = 50)
ax2.set_ylabel('Pressure', color = 'r')
plt.tick_params(axis = 'y', labelcolor = 'r')
#图例
plt.legend(loc = 'upper right')
plt.show()