在图形限制外显示文本

4 投票
2 回答
8887 浏览
提问于 2025-04-18 05:46

我想在一组小图的上面加一些文字作为标签:

import numpy as np
import matplotlib.pyplot as plt
# Create figure
fig, axs = plt.subplots(5, 4, figsize=(6.83, 9.19))
# Plot something
for axes in axs.ravel():
    axes.plot(range(5))
# Add some labels
fig.text(0.25, 1.01, "Label #1", fontsize=10, fontweight='bold', ha='center')
fig.text(0.75, 1.01, "Label #2", fontsize=10, fontweight='bold', ha='center')
fig.text(0.125, 0.99, "Sublabel #1", fontsize=10, ha='center')
fig.text(0.375, 0.99, "Sublabel #2", fontsize=10, ha='center')
fig.text(0.625, 0.99, "Sublabel #3", fontsize=10, ha='center')
fig.text(0.875, 0.99, "Sublabel #4", fontsize=10, ha='center')
# Save figure
fig.tight_layout()
fig.savefig('./temp.png', dpi=300)

但是因为这些标签是在图的上面,所以在保存的图像中看不到(虽然在ipython qtconsole中可以看到)。有没有人能帮我解决这个问题?

2 个回答

4

再次感谢Saullo的回答,我觉得这回答了我最初的问题。不过,我最后用了一个不同的解决方案,因为我觉得这个方案对页面大小的控制更好:

import numpy as np
import matplotlib.pyplot as plt
# Create figure
fig, axs = plt.subplots(5, 4, figsize=(6.83, 9.19))
# Plot something
for axes in axs.ravel():
    axes.plot(range(5))
# Add some labels
fig.text(0.25, 1., "Label #1", fontsize=10, fontweight='bold', ha='center', va='top')
fig.text(0.75, 1., "Label #2", fontsize=10, fontweight='bold', ha='center', va='top')
fig.text(0.125, 0.98, "Sublabel #1", fontsize=10, ha='center', va='top')
fig.text(0.375, 0.98, "Sublabel #2", fontsize=10, ha='center', va='top')
fig.text(0.625, 0.98, "Sublabel #3", fontsize=10, ha='center', va='top')
fig.text(0.875, 0.98, "Sublabel #4", fontsize=10, ha='center', va='top')
# Save figure
fig.tight_layout()
fig.subplots_adjust(top=.95)
fig.savefig('./temp.png', dpi=300)

基本上,这个技巧是:

1) 在文本中添加 va='top',并让文本的y坐标小于1,这样它们就能在范围内;

2) 使用 fig.subplots_adjust(top=.95) 来为文本留出空间。注意:这一步必须在 fig.tight_layout() 之后进行!

4

你可以这样做:

fig.savefig('./temp.png', dpi=300, bbox_inches='tight')

来调整保存时的图形。你也可以在一开始就设置好图形的大小,在“创建图形”之前加上:

plt.figure(figsize=(width, height))

撰写回答