根据标题自动化 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 回答。
我有一组三个变量,我想为其计算一个箱线图。三个变量的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 回答。