Легенда переписана сюжетом - matplotlib - PullRequest
1 голос
/ 23 апреля 2020

У меня есть график, который выглядит следующим образом: enter image description here

Я хочу поместить метки для линейного графика и маркеров в красный цвет. Однако легенда не появляется, потому что ее сюжет занимает свое место.

Обновление

оказывается, я не могу поместить несколько строк в plt.legend()

Я увеличил число, используя следующее:

 fig = plt.gcf()
 fig.set_size_inches(18.5, 10.5)

Однако теперь у меня есть только одна метка в легенде, с маркером, появляющимся на линейном графике, в то время как я скорее хочу два: один для маркера один и еще один для линии:

enter image description here

Обновленный код:

plt.plot(range(len(y)), y, '-bD',  c='blue', markerfacecolor='red', markeredgecolor='k', markevery=rare_cases, label='%s' % target_var_name)

fig = plt.gcf()
fig.set_size_inches(18.5, 10.5)

# changed this over here
plt.legend()

plt.savefig(output_folder + fig_name)
plt.close()

1 Ответ

2 голосов
/ 23 апреля 2020

То, что вы хотите сделать (иметь две метки для одного объекта), не является полностью невозможным, но НАМНОГО проще построить отдельную линию и редкие значения, например,

# boilerplate
import numpy as np
import matplotlib.pyplot as plt

# synthesize some data 
N = 501
t = np.linspace(0, 10, N)
s = np.sin(np.pi*t)
rare = np.zeros(N, dtype=bool); rare[:20]=True; np.random.shuffle(rare)

plt.plot(t, s, label='Curve')
plt.scatter(t[rare], s[rare], label='rare')
plt.legend()

plt.show()

enter image description here

Обновление

[...] оказывается, я не могу вставить несколько строк в plt.legend()

Ну, вы можете , если ① несколько строк находятся в итерируемом (кортеж или список), а ② количество строк (т. е. меток) равно количеству исполнителей (т. е. штуковин) в сюжете.

plt.legend(('a', 'b', 'c')) 
...