2013-10-11 38 views
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([]))。

+0

你是对的:每个子图都包含在ax数组中,并且可以独立地定制每个子图。例如:http://matplotlib.org/examples/pylab_examples/log_demo.html – lucasg

回答

3

如果您创建了一个二维图的数组,例如用:

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

然后axarray是物体的2D阵列,用含有各元素的matplotlib.axes.AxesSubplot

>>> axarray.shape 
(3, 4) 

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

设置所有阵列中的轴的属性的一个快速的方法是将环在轴阵列上的平坦迭代器:阵列中的SA单个元件然后可以以正常的方式设置它的属性:

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) 
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如果有机会的话我会改变次要情节的数量。