如何在Matplotlib中使用两个Y轴(两个单位)绘制单个数据?
在数据可视化的过程中,可能需要在同一张图表上展示两个不同的Y轴,对应不同的数值。比如,一个汽车的速度和油耗。这种情况下,我们可以在Matplotlib中使用两个Y轴来绘制这个数据。
在本文中,我们将向你展示如何在Matplotlib中使用两个Y轴来绘制单个数据。
示例数据
我们使用下面的示例数据来说明如何在Matplotlib中使用两个Y轴绘制单个数据:
import numpy as np
# 生成示例数据
x = np.arange(0, 10, 0.1)
y1 = np.sin(x)
y2 = np.exp(x)
# 将y2转化为与y1不同的数值范围
y2 = y2 / 1000
# 调整y1和y2的取值范围
y1_min, y1_max = np.round(np.min(y1), 1), np.round(np.max(y1), 1)
y2_min, y2_max = np.round(np.min(y2), 1), np.round(np.max(y2), 1)
这里我们生成了两条曲线,一条是sin函数,一条是指数函数。这两条曲线在y轴上的取值范围不同。我们将y2的取值范围缩小了1000倍,将其与y1的取值范围进行区分。
单一坐标轴绘制
我们首先演示绘制单一坐标轴的绘制方式。代码如下:
import matplotlib.pyplot as plt
# 创建一个图表对象
fig, ax = plt.subplots()
# 绘制y1的曲线
ax.plot(x, y1, linewidth=2, color='blue')
# 创建一个和y1共享x轴的坐标轴对象
ax2 = ax.twinx()
# 绘制y2的曲线
ax2.plot(x, y2, linewidth=2, color='green')
# 设置y轴的标签
ax.set_ylabel('y1')
ax2.set_ylabel('y2')
# 取消左侧坐标轴的边框
ax.spines['left'].set_visible(False)
# 将右侧坐标轴的边框的颜色设为green
ax2.spines['right'].set_color('green')
# 将y1和y2的刻度标签颜色相应修改
ax.tick_params(axis='y', labelcolor='blue')
ax2.tick_params(axis='y', labelcolor='green')
# 设置图表标题
plt.title('Two Y Axes')
plt.show()
代码解释:
我们首先调用plt.subplots()函数创建一个图表对象。然后,绘制y1的曲线。接着,我们创建一个和y1共享x轴的坐标轴对象,并绘制y2的曲线。为了更好地区分两个坐标轴,我们设置y1和y2的刻度标签颜色不同。为了取消左侧坐标轴的边框,我们可以使用ax.spines['left'].set_visible(False)。为了将右侧坐标轴的边框的颜色设为green,可以使用ax2.spines['right'].set_color('green')。最后,我们设置图表标题并展示图表。
通过上图,我们可以看到两个y轴存在,但是左右两条曲线之间的差距难以呈现。
接下来,我们将演示如何绘制两个彼此独立的y轴。
两个独立的坐标轴绘制
我们可以在Matplotlib中使用两个独立的坐标轴来绘制两个彼此独立的y轴。这样可以更好地呈现两个y轴之间的差距。
代码如下:
fig, ax1 = plt.subplots()
# 在ax1上绘制y1的曲线
color = 'tab:blue'
ax1.set_xlabel('x')
ax1.set_ylabel('y1', color=color)
ax1.plot(x, y1, linewidth=2, color=color)
ax1.tick_params(axis='y', labelcolor=color)
ax1.set_ylim(y1_min, y1_max)
# 在ax2上绘制y2的曲线
ax2 = ax1.twinx()
color = 'tab:green'
ax2.set_ylabel('y2', color=color)
ax2.plot(x, y2, linewidth=2, color=color)
ax2.tick_params(axis='y', labelcolor=color)
ax2.set_ylim(y2_min, y2_max)
# 添加图例
ax1.legend(['y1'], loc='upper left')
ax2.legend(['y2'], loc='upper right')
# 添加图表标题
plt.title('Two Independent Axes')
plt.show()
代码解释:
我们首先调用plt.subplots()函数创建一个图表对象。然后,我们在ax1上绘制y1的曲线,并设置y1轴的颜色和范围。接着,创建一个与ax1共享x轴但彼此独立的坐标轴对象ax2,绘制y2的曲线,设置y2轴的颜色和范围。然后,我们添加了每个y轴的标签,并设置它们的范围和颜色。同时,我们还添加了图例和图表标题。最后,展示图表。
通过上图,我们可以看到两个y轴之间的差距更加明显了。
结论
通过本文,我们学习了如何在Matplotlib中使用两个Y轴(两个单位)绘制单个数据。我们演示了如何使用单一坐标轴和两个独立的坐标轴来绘制图表。希望这篇文章对你有所帮助!
极客笔记