将figtext添加到子图的底部的问题

时间:2017-04-01 15:53:33

标签: python matplotlib

我正在尝试使用plt.figtext向一组子图添加一系列脚注,当我使用plt.savefig()命令打印到文件时,无法将它们全部显示出来,或者%matplotlib notebook保存到文件选项。

脚注列表非常长并且看起来像(当渲染到屏幕时,它工作正常):Desired output of figures and footnotes

但是,当我打印到文件时,它们会被切断:Undesired output

我将子图的数字大小设置为plt.figure(figsize=(7,10)) 并使用plt.tight_layout()格式化子图,以便轴不与标题混搭。

我一直在努力为我的生活找到一种方法来扩大输出的大小以考虑脚注和子图,但绝对没有运气。在任何想象中,这似乎都不是一个不合理的用例。

修改

在创建每个子图之后生成文本,沿着以下行:

plt.legend(loc=6, fontsize=10)
#plt.legend(bbox_to_anchor=(1.0, 1), loc=2, borderaxespad=0.)
plt.xlim(0, 45)
plt.ylim(2.5, 5.5)
plt.xlabel('Distance (km)', alpha=.75)
plt.ylabel('Pace (min/km)', alpha=.75)
plt.title('Top 4 Male Finishers and SA 2016 Twin Cities Marathon Timed$^1$ Splits$^2$')
plt.figtext(0.814, 0.01, '1 Provided by mtecResults', horizontalalignment='right', fontsize=6) 
plt.figtext(0.88, 0.0, '2 Mean time per unit distance between two points', horizontalalignment='right', fontsize=6) 
plt.figtext(0.845, -0.01, '3 SA Finished 670 out of 4716 Males', horizontalalignment='right', fontsize=6)
plt.figtext(0.845, -0.02, '4 SA Finished 754 out of 4756 Males', horizontalalignment='right', fontsize=6)

1 个答案:

答案 0 :(得分:1)

当然有很多选项可以确保在保存时图中的某些文字标签是实际的。

1。 bbox_inches参数

您可以选择不使用plt.tight_layout(),因为这会忽略添加为文本标签的文字。然后,您可以将bbox_inches参数用于plt.savefig

plt.savefig("output.png", bbox_inches = "tight")

此方法会增加数字大小,直到包含所有文本。

最好使用verticalalignment ="top"放置文本,并将测试放在图坐标中的y = 0附近。例如:

import matplotlib.pyplot as plt
plt.gca()

text = """1 Provided by mtecResults
2 Mean time per unit distance between two points
3 SA Finished 670 out of 4716 Males
4 SA Finished 754 out of 4756 Males"""

plt.figtext(0.05,0.00, text, fontsize=8, va="top", ha="left")

plt.savefig(__file__+".png", bbox_inches = "tight")
plt.show()

enter image description here

2。添加保证金。

您可以使用plt.subplots_adjust(bottom=0.4)在轴周围留出更多空间,然后可以用文本填充。对于其他维度,请使用参数topleftright,具体取决于文本所在的位置。
此选项要求文本在图中定位。它不会改变图形尺寸,但会减小轴的尺寸。

放置文本最好使用verticalalignment ="bottom"并将测试放在图坐标中靠近y = 0的位置。例如:

import matplotlib.pyplot as plt

plt.gca()
plt.subplots_adjust(bottom=0.2)

text = """1 Provided by mtecResults
2 Mean time per unit distance between two points
3 SA Finished 670 out of 4716 Males
4 SA Finished 754 out of 4756 Males"""

plt.figtext(0.05,0.01, text, fontsize=8, va="bottom", ha="left")

plt.savefig(__file__+"2.png")
plt.show()

enter image description here