我用图像下方显示的代码创建了下图。我希望这些盒子在水平方向上更薄,整个外形都可以适应新的盒子尺寸。我该怎么办?
我知道我可以使用sns.boxplot(data=df,width=someScalingFactor)
来更改框的宽度,但这会在框之间沿水平方向创建一个空间,这不是我想要的。
def plotBoxPlotDataMAE(self,data,figName):
df = pd.DataFrame(data).T
df = df.rename(columns={0:'Joint 1',1:'Joint 2',2:'Joint 3',3:'Average'})
f = plt.figure(figName,figsize=[5.3,6])
ax = f.add_subplot(111)
obj = sns.boxplot(data=df)
obj.set_ylabel(ylabel='Mean Absolute Angle Error [°]',fontsize=13)
plt.tick_params(axis='y',which='both',labelleft='on',labelright='on')
ax.yaxis.set_ticks_position('both')
最终,我希望图形变薄,因为大的框不会向绘图添加信息,并且我在文档中没有太多空间要使用它们。
答案 0 :(得分:2)
根据轴的大小确定框的大小,轴的大小取决于图形的大小。因此,要获得具有更薄盒子的更瘦身材,您需要更改身材尺寸。
您已经注意到,这会在轴和刻度标签上造成问题,但是使用@JohanC指出的tight_layout()
很容易解决。
完整代码:
f = plt.figure(figsize=[2,6])
ax = f.add_subplot(111)
sns.boxplot(data=df, ax=ax)
ax.set_ylabel(ylabel='Mean Absolute Angle Error [°]',fontsize=13)
plt.tick_params(axis='y',which='both',labelleft='on',labelright='on')
ax.yaxis.set_ticks_position('both')
plt.setp(ax.get_xticklabels(), rotation=90)
f.tight_layout()