图例为什么会在matplotlib中阻止文本?

问题描述

我正在尝试协调ax.legend()ax.text()的位置,但是看来选项loc = 'best'不太聪明

legend

显然,图例阻止了文本,我知道我可以改用loc = 'lower left',但我很好奇,为什么图例不关心文本?

这是代码

import numpy
  
## matplotlib
import matplotlib
matplotlib.use('Agg')
import pylab
from  matplotlib import rc
rc('font',**{'family': 'sans-serif','sans-serif': ['Times-Roman']})
rc('text',usetex = True)
matplotlib.rcParams['text.latex.preamble'] = [r"\usepackage{amsmath}"]

def test_plot():
    n_columns,n_rows = 1,1
    pylab.figure(figsize = (n_columns * 2.5,n_rows * 2.0))
    axs = {}
    xs = numpy.linspace(0.0001,2.0 * numpy.pi,100)

    ax = pylab.subplot(n_rows,n_columns,1)
    axs[1] = ax
    ys = numpy.sin(xs) / xs
    ax.plot(xs,ys,label = r'$1$')
    ax.text(0.8,0.8,r'$\frac{\sin{x}}{x}$',transform = ax.transAxes)
    ax.legend(loc = 'best',frameon = 0)

    pylab.tight_layout()
    pylab.savefig('./test.png',dpi = 2000)
    return

if __name__ == '__main__':
    test_plot()

谢谢!

解决方法

所以您想将图例放在左上角以外的任何地方...?您总是可以使用:

import random

spot = ["center","upper center","lower center","right","upper right","lower right","left","lower left"]
random_spot = spot[random.randint(0,spot.__len__() - 1)]
plt.legend(loc=random_spot,borderaxespad=1)

或“左”,“左下”,“中心”,“上中心”,“下中心”,“右”或“右下”

或者,如果您希望它在选择一个随机点的同时避免出现“左上方”:

{{1}}

这应该将其随机放置在左上角以外的任何位置。这就是您需要的吗?