首页 > 解决方案 > 根据标题自动化 matplotlib 图形尺寸

问题描述

我有一组三个变量,我想为其计算一个箱线图。这三个变量共享相同的标题,并且有不同的 x 标签,我希望它们三个在同一个图中创建。

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

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 文档,因此我不能一次参与更改图形尺寸。

标签: pythonmatplotlibsubplot

解决方案


为了为多个子图创建标题,您可以使用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也在这里回答了问题。


推荐阅读