2024-05-17 16:43:11 发布
网友
我用以下方法制作了一些子图:
fig, ax = plt.subplots(nrows=2, ncols=3, sharex=True, sharey=True)
然后,我想对子批次进行个性化设置,例如:
不过,我也希望对tick进行个性化设置,比如删除其中一些子批次的tick和标签。 我怎么能那样做?在
问题是,在定义之后,ax是一个numpy数组:我不太了解它,我知道的是不可能使用属性(比如,ax[0].set_yticks([]))。在
ax[0].set_yticks([])
如果你用二维图创建数组,例如:
>>> fig, axarray = plt.subplots(3, 4)
那么axarray是一个2D对象数组,每个元素都包含一个matplotlib.axes.AxesSubplot:
axarray
matplotlib.axes.AxesSubplot
问题是,当您索引axarray[0]时,实际上是在索引该数组的一整行,其中包含多个轴:
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)
您可以做的另一件事是将数组中的轴“解包”到单个axis对象的嵌套元组中,不过在处理大量行/列时,这会有点尴尬:
fig, ((ax1, ax2, ax3, ax4), (ax5, ax6, ax7, ax8), (ax9, ax10, ax11, ax12)) \ = plt.subplots(3,4)
使用此方法时:
您有两个选择,要么像您建议的那样调用数组的元素ax(但您需要使用两个索引或将其展平):
ax
如果在绘图上循环,第二行很有用。也可以按以下方式修改:
fig, ((ax1, ax2, ax3), (ax4, ax5, ax6)) = plt.subplots(nrows=2, ncols=3, sharex=True, sharey=True)
这取决于您的用例,哪一个更好,如果有机会更改子批的数量,我通常会调用数组ax。在
如果你用二维图创建数组,例如:
那么
^{pr2}$axarray
是一个2D对象数组,每个元素都包含一个matplotlib.axes.AxesSubplot
:问题是,当您索引
axarray[0]
时,实际上是在索引该数组的一整行,其中包含多个轴:但是,如果在数组中寻址单个元素,则可以按常规方式设置其属性:
设置数组中所有轴属性的快速方法是在轴数组上的平面迭代器上循环:
您可以做的另一件事是将数组中的轴“解包”到单个axis对象的嵌套元组中,不过在处理大量行/列时,这会有点尴尬:
使用此方法时:
您有两个选择,要么像您建议的那样调用数组的元素
^{pr2}$ax
(但您需要使用两个索引或将其展平):如果在绘图上循环,第二行很有用。也可以按以下方式修改:
这取决于您的用例,哪一个更好,如果有机会更改子批的数量,我通常会调用数组
ax
。在相关问题 更多 >
编程相关推荐