多个子剧情以个性化

2024-05-17 16:43:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

然后,我想对子批次进行个性化设置,例如:

^{pr2}$

不过,我也希望对tick进行个性化设置,比如删除其中一些子批次的tick和标签。 我怎么能那样做?在

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


Tags: 方法truefigplt标签ax个性化tick
2条回答

如果你用二维图创建数组,例如:

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

那么axarray是一个2D对象数组,每个元素都包含一个matplotlib.axes.AxesSubplot

^{pr2}$

问题是,当您索引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)

使用此方法时:

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

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

^{pr2}$

如果在绘图上循环,第二行很有用。也可以按以下方式修改:

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

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

相关问题 更多 >