在图形限制外显示文本
我想在一组小图的上面加一些文字作为标签:
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))