在matplotlib中有指定图例字体颜色的替代方法吗?

时间:2019-06-19 20:41:23

标签: python-3.x matplotlib

this question的回答似乎表明,设置图例字体属性的一种方法是通过以下方式:

     import pylab as plt
     leg = plt.legend(framealpha = 0, loc = 'best')
     for text in leg.get_texts():
              plt.setp(text, color = 'w')

需要调用plt.legend()并收集所有图例,并且不区分某些特定图例。在我的代码中,我有几个不同的情节。例如,dicts1和dicts2是包含数据框的字典:

def compare_data(dicts1, dicts2):
    for dic in dicts1:
       df = dic['df']
       style = dic['style'] 
       plt.plot(df['time'], df['y'], **style)   
       ## style contains the legend text
       ## use the default font

     for dic in dicts2:
       df = dic['df']
       style = dic['style']
       plt.plot(df['time'], df['y'], **style)
       ## only modify the font color for the legends of these !!

     # finally draw the legend with the common properties:
     plt.legend(loc = 'best', frameon=False)

如何修改仅dict2而不是dict1的图例的字体颜色? dict1的图例颜色值保留为默认值。两个字典中的元素数都是任意的。

1 个答案:

答案 0 :(得分:0)

据我所知,在plot()时还没有办法指定图例标签的属性。

我假设您可以知道每个词典中有多少个数据集,并且您为每个词典生成了一个图例。如果是这样,那么仅修改与第二行系列相对应的图例很容易:

dict1 = {f'label#1 {i+1}':np.random.random(size=(5,)) for i in range(3)}
dict2 = {f'label#2 {i+1}':np.random.random(size=(5,)) for i in range(4)}

for l,d in dict1.items():
    plt.plot(d, label=l)
for l,d in dict2.items():
    plt.plot(d, label=l)

leg = plt.legend()
for text in leg.get_texts()[len(dict1):]:
    plt.setp(text, color = 'w')

enter image description here