根据标题自动化 matplotlib 图尺寸

Automate matplotlib figure dimension based on the title

我有一组三个变量,我想为其计算一个箱线图。三个变量的title相同,x label不同,希望三个变量创建在同一张图中。

查看以下示例(使用假数据):

import numpy as np
import matplotlib.pyplot as plt

data = dict(var1=np.random.normal(0, 1, 1000), var2=np.random.normal(0, 2, 1000), var3=np.random.normal(1, 2, 1000))
var_title = 'Really really long overlapping title'
fig = plt.figure()
for i in range(len(data)):
    plt.subplot(1, 3, i + 1)
    plt.boxplot(data[data.keys()[i]])
    plt.title(var_title)
    plt.show()

这段代码生成下图:

现在,我想要的是在三个子图上只设置一个标题(因为标题相同),或者让 python 自动重新调整图形的尺寸,以便标题适合并且可以阅读.

我问这个是因为这个图形创建是批处理过程的一部分,在这个批处理过程中图形会自动保存并用于生成 PDF 文档,所以我不能一次改变一个图形尺寸.

根据@ImportanceOfBeingErnest 的评论,您可以这样做:

import numpy as np
import matplotlib.pyplot as plt

data = dict(var1=np.random.normal(0, 1, 1000), var2=np.random.normal(0, 2, 1000), var3=np.random.normal(1, 2, 1000))
var_title = 'Really really long overlapping title' 


f, ax = plt.subplots(1, 3)
for i in range(len(data)):
    ax[i].boxplot(data[list(data.keys())[i]])
f.suptitle(var_title)
plt.show()

为了为多个子图创建标题,您可以使用 Figure.suptitle 而不是 fig.title 并设置字体大小等格式。

因此您的代码将如下所示:

import numpy as np
import matplotlib.pyplot as plt

data = dict(var1=np.random.normal(0, 1, 1000), 
var2=np.random.normal(0, 2, 1000), var3=np.random.normal(1, 2, 1000))
var_title = 'Really really long overlapping title'
fig = plt.figure()
fig.suptitle(var_title)
for i in range(len(data)):
    plt.subplot(1, 3, i + 1)
    plt.boxplot(data[data.keys()[i]])
    plt.show()

问题也由 orbeckst here 回答。