Python “设置全局”;图例.loc“;对于使用rcParams的matplotlib?

Python “设置全局”;图例.loc“;对于使用rcParams的matplotlib?,python,matplotlib,Python,Matplotlib,我必须绘制大量图表,对于所有图表,我需要告诉legend以找到最佳位置: plt.legend(loc="best") 然而,我认为对生成代码的每个不同图形调用此函数不是一个好主意 是否可以在Python脚本开始时使用rcParams或rc设置此参数? 我一开始就试过这些,但都不管用: rcParams['legend.loc'] = "best" rc('legend', loc="best") 总的来说,是否有一种惯用的方法来设置全局matplotlib设置,以便减少重复图形配置代码的

我必须绘制大量图表,对于所有图表,我需要告诉
legend
以找到最佳位置:

plt.legend(loc="best")
然而,我认为对生成代码的每个不同图形调用此函数不是一个好主意

是否可以在Python脚本开始时使用
rcParams
rc
设置此参数? 我一开始就试过这些,但都不管用:

rcParams['legend.loc'] = "best"

rc('legend', loc="best")

总的来说,是否有一种惯用的方法来设置全局matplotlib设置,以便减少重复图形配置代码的数量?

不清楚,为什么您的命令
rcParams['legend.loc']=“best”
不会影响以下图形。如您所见,它在以下代码中按预期工作:

import numpy as np
from matplotlib import pyplot as plt

#possible legend locations
leg_loc = {0: "best",
           1: "upper right",
           2: "upper left",
           3: "lower left",
           4: "lower right",
           5: "right",
           6: "center left",
           7: "center right",
           8: "lower center",
           9: "upper center",
           10: "center"}

#random legend location
loc_num = np.random.randint(10)
#set it for all following figures
plt.rcParams['legend.loc'] = leg_loc[loc_num]

#create three figures with random data
n = 10
xdata = np.arange(n)

for i in range(3):
    plt.figure(i)
    ydata = np.random.random(n)
    #set some points in right upper corner, in case legend location is "best"
    if i == 1:
        ydata[-3:] = 0.98
    plt.scatter(xdata, ydata, label = "data #{}\nlegend location: {}".format(i, leg_loc[loc_num]))
    plt.legend()

plt.show()
我(错误地)认为设置这些默认值就足以触发
图例
绘图。似乎实际上需要调用
plt.legend()
。设置这些默认值会隐含地指示matplotlib绘制它们。谢谢你的例子。