Pyplot:为更大的标题留出空间

时间:2018-04-20 16:23:43

标签: python matplotlib seaborn

sns.boxplot(data=df, width=0.5)
plt.title(f'Distribution of scores for initial and resubmission\
           \nonly among students who resubmitted at all.\
           \n(n = {df.shape[0]})')

我想使用更大的字体,并在顶部白色边缘留出更多空间,以便标题不会被塞进。令人惊讶的是,尽管有一些严肃的谷歌搜索,我完全无法找到该选项!

1 个答案:

答案 0 :(得分:0)

您遇到的基本问题是多行标题太高,并且会在页面上呈现#34;。

为您提供的一些选择:

  • 最省力的解决方案可能是使用tight_layout()plt.tight_layout()操纵子图位置和间距,以便标签,刻度和标题更合适。

  • 如果这还不够,还可以查看plt.subplots_adjust(),它可以控制在一个或多个子图周围使用多少空格;您可以在一时修改一个方面,并保留所有其他设置。在您的情况下,您可以使用plt.subplots_adjust(top=0.8)

  • 如果您要为出版物或类似作品生成最终数字,您可能希望进行大量调整以完善它。在这种情况下,您可以使用add_axes精确控制(子)绘图位置(请参阅此示例https://stackoverflow.com/a/17479417)。

这是一个例子,有6行标题强调。左侧面板显示默认值 - 标题的一半被剪掉。除了顶部之外,右侧面板的所有测量值都相同;中间已经自动删除了所有方面的空白。

improved title handling

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

data = 55 + 5* np.random.randn(1000,)    # some data
vlongtitle = "\n".join(["long title"]*6) # a 6-line title

# using tight_layout, all the margins are reduced
plt.figure()
sns.boxplot(data, width=0.5)
plt.title(vlongtitle)
plt.tight_layout()

# 2nd option, just edit one aspect.
plt.figure()
sns.boxplot(data, width=0.5)
plt.title(vlongtitle)
plt.subplots_adjust(top=0.72)