Matplotlib(GridSpec) - Subplot轴标签被截断?试过`tight_layout`

时间:2018-04-30 23:10:33

标签: python matplotlib axis-labels subplot

我正在使用GridSpec来组织子图。对于所有情节,我都有一个共享的colorbar

网上的所有建议似乎都指出tight_layout()是解决轴标签切断问题的方法,但这似乎不适用于此(除非它出现在另一种我不知道的形式)。

我还尝试使用rect的{​​{1}}参数tight_layoutfigplt

gs

这会生成下面的图像。

enter image description here

1 个答案:

答案 0 :(得分:2)

如评论所述,将bottom参数设置为较大的值,例如bottom=0.3将为您提供更多空间来容纳轴装饰器。

此外,为了不使地块过度收缩,使图形更高一点(例如3英寸而不是2英寸)可能是有用的。

import matplotlib.pyplot as plt
import numpy as np 
import matplotlib.gridspec as gridspec
from mpl_toolkits.mplot3d import Axes3D

gs = gridspec.GridSpec(1,7,hspace=0.05,wspace=0.5, bottom=0.3,
                       left=0.02, right=0.95, width_ratios=[1,1,1,1,1,1,0.1])
fig = plt.figure(figsize=(18, 3), dpi=80, facecolor='w', edgecolor='k')

data = np.random.rand(3,6,224,5)

for i in range(6):
    ax = plt.subplot(gs[0, i], projection='3d')
    p = ax.scatter(data[0,i,:,0], data[0,i,:,1], data[0,i,:,2], 
                   c=data[0,i,:,4], marker='o')
    ax.set_title("Case " + str(i+1))
    ax.set_xlabel('Batch Size', linespacing=3)
    ax.set_ylabel('Window Size', linespacing=3)
    ax.set_zlabel('Neurons', linespacing=3)
    ax.xaxis.labelpad=20
    ax.yaxis.labelpad=20
    ax.zaxis.labelpad=10

cbar = plt.subplot(gs[0,6])
fig.colorbar(p, cax=cbar, label='RMSE')

# This is only needed for jupyter
fig.add_axes([0,0,1,1]).axis("off")

plt.show()

enter image description here

不幸的是,在jupyter中,%matplotlib inline后端始终使用bbox_inches = "tight"设置创建其图像。因此,解决方法是在图中创建一些元素,以确保“紧”区域足够大。在这里,一个选项是使用fig.add_axes([0,0,1,1]).axis("off")