0

我使用以下方法制作了一些子图:

fig, ax = plt.subplots(nrows=2, ncols=3, sharex=True, sharey=True)

然后,我想个性化子图,例如:

plt.subplots_adjust(hspace = 0., wspace= 0.)

但是,我也想对刻度进行个性化设置,比如删除其中一些子图的刻度和标签。我怎么能那样做?

问题是,在定义之后, ax 是一个 numpy 数组:我不太了解它,我知道的是不可能使用属性(如,ax[0].set_yticks([]))。

4

2 回答 2

3

如果您创建一个 2D 绘图数组,例如:

>>> fig, axarray = plt.subplots(3, 4)

thenaxarray是一个二维对象数组,每个元素包含一个matplotlib.axes.AxesSubplot

>>> axarray.shape
(3, 4)

问题是,当您 index 时axarray[0],您实际上是在索引该数组的一整行,其中包含几个轴:

>>> axarray[0].shape
(4,)

>>> type(axarray[0])
numpy.ndarray

但是,如果您处理数组中的单个元素,则可以按正常方式设置其属性:

>>> type(axarray[0,0])
matplotlib.axes.AxesSubplot

>>> axarray[0,0].set_title('Top left')

设置数组中所有轴的属性的一种快速方法是循环遍历轴数组上的平面迭代器:

for ii,ax in enumerate(axarray.flat):
    ax.set_title('Axis %i' %ii)

您可以做的另一件事是将数组中的轴“解包”到单个轴对象的嵌套元组中,尽管在处理大量行/列时这会有点尴尬:

fig, ((ax1, ax2, ax3, ax4), (ax5, ax6, ax7, ax8), (ax9, ax10, ax11, ax12)) \
    = plt.subplots(3,4)
于 2013-10-11T10:09:15.157 回答
1

使用此方法时:

fig, ax = plt.subplots(nrows=2, ncols=3, sharex=True, sharey=True)

你有两个选择,要么像你建议的那样调用数组的元素ax(但你需要使用两个索引或展平它):

ax[0][0].plot(...
ax.flat[0].plot(...

如果您遍历图,则第二行很有用。或者您可以通过以下方式进行修改:

fig, ((ax1, ax2, ax3), (ax4, ax5, ax6)) = plt.subplots(nrows=2, ncols=3, sharex=True, sharey=True)

这将取决于您的用例哪个更好,ax如果有机会更改子图的数量,我通常会调用数组。

于 2013-10-11T10:08:26.357 回答