我有一组三个变量,我想为其计算箱线图。这三个变量具有相同的标题,并且具有不同的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文档,因此我无法参与一次更改图形尺寸的操作。 / p>
答案 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()