如何在Matplotlib中使用两个Y轴(两个单位)绘制单个数据?

如何在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轴(两个单位)绘制单个数据。我们演示了如何使用单一坐标轴和两个独立的坐标轴来绘制图表。希望这篇文章对你有所帮助!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程