【问题标题】:How to reduce box size of seaborn box plot and make figure adapt to the new box sizes?如何减小seaborn箱形图的箱体尺寸并使图形适应新的箱体尺寸?
【发布时间】:2020-01-12 13:28:04
【问题描述】:

我使用图像下方显示的代码创建了下图。我希望盒子在水平方向上更薄,整个图形以适应新的盒子尺寸。我该怎么做?

我知道我可以使用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')

最终我希望图更薄,因为大的框不会向绘图添加信息,而且我在文档中没有太多空间我想使用它们。

【问题讨论】:

  • 当你打电话给plt.figure时,为什么不通过设置一个更薄的figsize来做一个更瘦的身材?
  • 如果我把figsize变小,那么y轴的标签就会消失。
  • 如果更改了 figsize 并且某些部分变得不可见,您可以使用 plt.subplots_adjust(left=0.3) 之类的东西调整边框间距。或plt.tight_layout

标签: python python-3.x matplotlib seaborn


【解决方案1】:

框的大小是根据轴的大小确定的,轴的大小取决于图形的大小。所以要想用更薄的盒子得到更薄的图,你需要改变图的大小。

正如您所指出的,这会导致轴和刻度标签出现问题,但正如 @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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2021-12-23
    相关资源
    最近更新 更多