Есть ли альтернативный способ указать цвет шрифта легенды в matplotlib? - PullRequest
0 голосов
/ 19 июня 2019

Ответ на на этот вопрос , по-видимому, предполагает, что один из способов установить свойства шрифта легенды заключается в следующем:

     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 голосов
/ 20 июня 2019

Насколько я знаю, нет возможности указать свойства надписей легенды во время plot().

Я предполагаю, что вы можете знать, сколько наборов данных у вас есть в каждом словаре, и что вы генерируете легенду для каждого из них. Если это так, то легко изменить только легенды, соответствующие 2-й серии строк:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...