Подтвердить что ты не робот

Легенда сюжета Python: маркеры появляются дважды

Простой сюжет с легендой, сделанной с помощью matplotlib, дает следующее: маркеры слева от надписей моей легенды появляются дважды. Кто-нибудь знает, почему и как избежать проблемы? Моя команда:

pl.plot(x1,x2,'g^', label='regional')
pl.plot(y1,y2,'bo', label='local')
pl.legend( loc='upper left' )

Спасибо

4b9b3361

Ответ 1

Вы можете изменить количество маркеров, показанных в легенде, с помощью ключевого слова numpoints:

import matplotlib.pyplot as plt
import numpy as np
x1 = y1 = np.linspace(0, 10, 100)
x2 = np.sin(x1)
y2 = np.cos(y1)
plt.plot(x1,x2,'g--^', label='regional')
plt.plot(y1,y2,'b-o', label='local')
plt.legend( loc='upper left', numpoints = 1 )
plt.show()

enter image description here


Я считаю, что маркеры появляются дважды (по умолчанию), потому что matplotlib пытается показать линейные коннекторы между маркерами. Это выглядит немного странно, когда нет разъема.

Если график имел сплошные и пунктирные линии,

plt.plot(x1,x2,'g--^', label='regional')
plt.plot(y1,y2,'b-o', label='local')

то легенда выглядит так:

enter image description here

и теперь вы можете увидеть эффект linestyle между маркерами в легенде (а также на графике).


Если вам вообще не нужен дескриптор легенды, вы можете использовать

plt.legend(..., handlelength=0)

Например,

import numpy as np
import matplotlib.pyplot as plt

x1 = y1 = np.linspace(0, 10, 100)
x2 = np.sin(x1)
y2 = np.cos(y1)
plt.plot(x1,x2,'g--^', label='regional')
plt.plot(y1,y2,'b-o', label='local')
plt.legend(loc='best', numpoints=1, handlelength=0)
plt.show()

enter image description here

Вы можете использовать

plt.legend(loc='best', numpoints=1, handlelength=0, 
           markerscale=0, handletextpad=0)

чтобы удалить маркер легенды.