matplotlib底图子图重叠

时间:2015-04-01 09:23:25

标签: python matplotlib subplot matplotlib-basemap

我试图使用底图生成一些地理地图的子图。以下是我正在处理的代码部分:

import matplotlib.pyplot as plt
#---Some code to read in the data
# ...

#-----Get a A4 sized landscape figure
fig=plt.figure(figsize=(11.69,8.27), dpi=100)

#----2*3 Subplots-------------
for ii in range(6):
    ax=fig.add_subplot(2,3,ii+1)

    #---Basemap contourf of data
    baseIsofill(var[ii],ax,'local')
    ax.set_title('(a)',loc='left')


#plt.tight_layout()
plt.tight_layout(pad=2.0,h_pad=6.5,w_pad=4.5)
plt.show() 

问题是子图布局:

  • 如果没有tight_layout(),子图中的图和文本不会重叠,但它们都变得太小而且没有充分利用图形空间(图1)。 / LI>
  • 使用plt.tight_layout()时,子图占据了大部分可用的图形空间,但是纬度标签开始重叠(图2)。
  • plt.tight_layout(pad=2.0,h_pad=6.5,w_pad=4.5)给出了期望的结果(图3)。但是当使用不同的子图布局时,需要更改参数(例如,横向A4上的3 * 2,图4,再次太小)。

2x3 subplots without <code>tight_layout()</code>, too small 2x3 subplots with <code>tight_layout()</code>, overlaps 2x3 subplots with <code>tight_layout((pad=2.0,h_pad=6.5,w_pad=4.5)</code>, desired result 3x2 subplots with same <code>tight_layout(pad=2.0,h_pad=6.5,w_pad=4.5)</code> as in Fig.3, too small again

BaseIsofill()功能中,我缩小了试图避免重叠的纬度标签的字体大小。缩小是子图布局的函数(fontsize = 7. / max(nrows,ncolns)+5)。除此之外,函数内部不会进行任何与大小相关的更改。

如果我花时间调整填充参数,我总能得到一个好的结果,但这将涉及一些试验和错误测试,并且不健壮。毕竟,对子图布局进行快速而强大的修复是tight_layout的意义所在。所以我想知道有没有人想出解决方案?

PS:我的matplotlib版本是1.3.1。底图版本是1.0.7

0 个答案:

没有答案