Легенда Matplotlib: как назначить несколько значений разброса - PullRequest
4 голосов
/ 05 августа 2011

Я использую библиотеку matplotlib в python для генерации графиков рассеяния xy с качеством публикации.Я столкнулся с проблемой, касающейся маркеров в легенде.Я строю 2 разных серии xy-scatter;одна представляет собой набор точек xy, образующих кривую, а другая представляет собой одну точку xy.

Мне бы хотелось, чтобы легенда показала 3 маркера для «кривой» и 1 маркер для одной точки.Единственный способ, которым я знаю, как изменить количество маркеров легенды, - использовать аргумент «точки рассеяния» при объявлении легенды.Однако, этот аргумент устанавливает количество маркеров для всех серий в легенде, и я не уверен, как изменить каждую запись легенды индивидуально .

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

РЕДАКТИРОВАТЬ: Здесь представлены ссылки, показывающие изображения с различными значениями точек рассеяния.

scatterpoints = 3: http://imgur.com/8ONAT

scatterpoints = 1: http://imgur.com/TFcYV

Надеюсь, это немного прояснит проблему.

1 Ответ

4 голосов
/ 06 августа 2011

вы можете получить строку в легенде и изменить ее самостоятельно:

import numpy as np
import pylab as pl
x = np.linspace(0, 2*np.pi, 100)
pl.plot(x, np.sin(x), "-x", label=u"sin")
pl.plot(x, np.random.standard_normal(len(x)), 'o', label=u"rand")
leg = pl.legend(numpoints=3)
l = leg.legendHandles[1]
l._legmarker.set_xdata(l._legmarker.get_xdata()[1:2])
l._legmarker.set_ydata(l._legmarker.get_ydata()[1:2])
##or
#l._legmarker.set_markevery(3)
pl.show()

Legend.legendHandles - это список всех строк в легенде, а атрибут _legmarker строки - это метки.

Вы можете вызвать set_markevery (3) или set_xdata () & set_ydata (), чтобы изменить количество меток.

enter image description here

...