根据标题自动执行matplotlib图形尺寸

时间:2018-12-12 20:16:52

标签: python matplotlib subplot

我有一组三个变量,我想为其计算箱线图。这三个变量具有相同的标题,并且具有不同的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()

此代码生成下图: enter image description here

现在,我想要的是在三个子图上仅设置一个标题(因为标题相同),或者让python自动重新定义图形,以使标题适合并可以读取。

我之所以这样要求,是因为此图形创建是批处理过程的一部分,其中图形自动保存并用于生成PDF文档,因此我无法参与一次更改图形尺寸的操作。 / p>

2 个答案:

答案 0 :(得分:2)

要为多个子图创建标题,可以使用Figure.suptitle代替图标题和格式字体大小以及在此处指定的大小。

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

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回答了问题。

答案 1 :(得分:0)

根据@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()

Result