<p>这个问题已经很老了,但由于到目前为止(2019年)还没有一个通用的解决方案,根据<a href="https://github.com/matplotlib/matplotlib/issues/1313" rel="nofollow noreferrer">Add loc=best kwarg to pyplot.text()</a>,我使用<code>legend()</code>和以下解决方法来获得简单文本框的自动放置:</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpl_patches
x = np.linspace(-1,1)
fig, ax = plt.subplots()
ax.plot(x, x*x)
# create a list with two empty handles (or more if needed)
handles = [mpl_patches.Rectangle((0, 0), 1, 1, fc="white", ec="white",
lw=0, alpha=0)] * 2
# create the corresponding number of labels (= the text you want to display)
labels = []
labels.append("pi = {0:.4g}".format(np.pi))
labels.append("root(2) = {0:.4g}".format(np.sqrt(2)))
# create the legend, supressing the blank space of the empty line symbol and the
# padding between symbol and label by setting handlelenght and handletextpad
ax.legend(handles, labels, loc='best', fontsize='small',
fancybox=True, framealpha=0.7,
handlelength=0, handletextpad=0)
plt.show()
</code></pre>
<p>一般的想法是创建一个带有空行符号的图例,然后删除产生的空白。<a href="https://stackoverflow.com/questions/20048352/how-to-adjust-the-size-of-matplotlib-legend-box">How to adjust the size of matplotlib legend box?</a>帮助我设置图例格式。</p>
<p><a href="https://i.stack.imgur.com/lJKiR.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/lJKiR.png" alt="Example plot with automatically positioned text box"/></a></p>