matplotlib 如何在每个子图中设置轴限制[重复]

6bc51xsx  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(115)

此问题已在此处有答案

How to set the subplot axis range(6个答案)
6天前关闭
我用下面的代码创建了一个子图:

f, axs =plt.subplots(2,3)

现在,在一个循环中,我通过执行以下操作在每个子图上绘制一个图:

for i in range(5):
 plt.gcf().get_axes()[i].plot(x,u)

是否有类似的代码来设置我正在访问的子图的轴限制?

ndasle7k

ndasle7k1#

是的,有,但让我们清理代码,同时我们在它:

f, axs = plt.subplots(2, 3)

for i in range(5): #are you sure you don't mean 2x3=6?
    axs.flat[i].plot(x, u)
    axs.flat[i].set_xlim(xmin, xmax)
    axs.flat[i].set_ylim(ymin, ymax)

使用axs.flataxs(2,3)轴数组转换为长度为6的可迭代轴。比plt.gcf().get_axes()更容易使用。
如果只使用range语句迭代轴,而不使用索引i,那么只需迭代axs即可。

f, axs = plt.subplots(2, 3)

for ax in axs.flat: #this will iterate over all 6 axes
    ax.plot(x, u)
    ax.set_xlim(xmin, xmax)
    ax.set_ylim(ymin, ymax)
w6lpcovy

w6lpcovy2#

是的,你可以在AxesSubplot对象get_axes()[i]上使用.set_xlim和.set_ylim。
你给出的样式的示例代码:

import numpy as np
from matplotlib import pyplot as plt
f, axs =plt.subplots(2,3)
x = np.linspace(0,10)
u = np.sin(x)
for i in range(6):
    plt.gcf().get_axes()[i].plot(x,u)
    plt.gcf().get_axes()[i].set_xlim(0,5)
    plt.gcf().get_axes()[i].set_ylim(-2,1)

或者稍微更pythonically:

import numpy as np
from matplotlib import pyplot as plt
f, axs =plt.subplots(2,3)
x = np.linspace(0,10)
u = np.sin(x)
for sub_plot_axis in plt.gcf().get_axes():
    sub_plot_axis.plot(x,u)
    sub_plot_axis.set_xlim(0,5)
    sub_plot_axis.set_ylim(-2,1)

相关问题