使用matplotlib中的axis对象设置活动子图?

nbr*_*n12 11 python matplotlib

面向对象的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)
Run Code Online (Sandbox Code Playgroud)

有这样的功能some_function_to_set_active_subplot吗?

编辑:我特意不能使用ax.plot,或类似的东西.我基本上是在询问如何将面向对象的界面与matlab风格的界面混合在一起.

编辑2:我也不想使用它们plt.subplot.我想使用OO接口来设置子图,并使用matlab风格进行实际绘图.

Mol*_*lly 14

您可以使用plt.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()
Run Code Online (Sandbox Code Playgroud)

  • 还有`plt.sca(ax)` (3认同)

mm_*_*mm_ 6

此方法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()
Run Code Online (Sandbox Code Playgroud)