Маркеры легенды matplotlib только один раз


238

Я часто рисую точку на сюжете matplotlib с помощью:

x = 10
y = 100
plot(x, y, "k*", label="Global Optimum")
legend()

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

* * Global Optimum

когда я действительно хочу, чтобы это выглядело так:

 *  Global Optimum

Как мне это сделать?


48
Я хотел бы поднять этот вопрос несколько раз. Я ненавижу numpoints=2соглашение по умолчанию и с облегчением увидел, что кто-то уже нашел время, чтобы спросить об этом и получить ответ.
Крис Редфорд

24
Mind: вариант для scatterplots естьscatterpoints=1
Маркос Алекс

Ответы:


253

Это должно работать:

legend(numpoints=1)

Кстати, если вы добавите строку

legend.numpoints     : 1      # the number of points in the legend line

в ваш файл matplotlibrc, тогда это будет новое значение по умолчанию.

[См. Также точки рассеяния, в зависимости от вашего сюжета.]

API: ссылка на документы API


7
Спасибо. Я столкнулся с этим сегодня также. Почему это не по умолчанию?
соленое журавль

Не могли бы вы добавить ссылку на API? matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend Я мог бы просто отредактировать это в себе, но это кажется грубым.
Такасуэлл

2
Есть ли какой-нибудь способ уменьшить область, которую берет легенда?
Йотам

3
@DMS: я этого не видел. Моя ошибка. Вы также должны выделить его как код, чтобы сделать его более заметным.
Маркос Алекс

2
В конце концов, есть планы, чтобы numpoints = 1 был установлен по умолчанию в matplotlib 2.0! Ура! github.com/matplotlib/matplotlib/issues/4854
Дэн Хикстейн,

25

Мне нравится динамически изменять параметры моего matplotlib rc в каждом скрипте Python. Для достижения этой цели я просто использую что-то подобное в начале своих файлов на python.

from pylab import *
rcParams['legend.numpoints'] = 1

Это будет применяться ко всем графикам, сгенерированным из моего файла python.

РЕДАКТИРОВАТЬ: Для тех, кто не любит импортировать pylab, длинный ответ

import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.