如何使用Axes对象在matplotlib中设置活动子图?

25 投票
2 回答
20143 浏览
提问于 2025-04-18 11:05

面向对象的 matplotlib 子图接口挺不错的,但我在调用一些包含 plt.plot(x, y 这样的代码的函数时遇到了困难。这些函数在使用 plt.subplot() 时很顺利,但我想知道是否可以用给定的坐标轴对象来设置当前活动的子图?具体来说,我想要类似下面的方式来在两个不同的子图中绘图:

import matplotlib.pyplot as plt

x = [0 ,1, 2]
y= [0 ,1 2]

fig, axs = plt.subplots(2,1)

plt.some_function_to_set_active_subplot(axs[0])
plt.plot(x, y)

plt.some_function_to_set_active_subplot(axs[1])
plt.plot(x, y)

有没有这样的函数 some_function_to_set_active_subplot 呢?

编辑:我特别不能使用 ax.plot 或类似的东西。我基本上是在询问如何将面向对象的接口与 matlab 风格的接口结合使用。

编辑 2:我也不想使用 plt.subplot。我想用面向对象的接口来设置子图,而用 matlab 风格来进行实际的绘图。

2 个回答

10

这个方法 plt.axes 已经不推荐使用了。建议你用 plt.sca 来代替。接下来可以参考上面的例子:

import matplotlib.pyplot as plt

x = [0 ,1, 2]
y = [10 ,20, 30]

fig, axs = plt.subplots(2,1)

plt.sca(axs[0])
plt.plot(x,y)
plt.sca(axs[1])
plt.plot(y,x)
plt.show()
25

你可以使用 plt.axes 来设置当前活动的坐标轴。根据 文档 的说明:“axes(h) 中的 h 是一个坐标轴实例,这样 h 就成为当前的坐标轴。”

import matplotlib.pyplot as plt

x = [0 ,1, 2]
y = [10 ,20, 30]

fig, axs = plt.subplots(2,1)

plt.axes(axs[0])
plt.plot(x,y)
plt.axes(axs[1])
plt.plot(y,x)
plt.show()

撰写回答