Удалить легенду на фигуре Matplotlib


169

Чтобы добавить легенду к сюжету matplotlib, достаточно просто запустить legend().

Как убрать легенду с сюжета?

(Самое близкое, к чему я пришел, - это запустить legend([]), чтобы очистить легенду от данных. Но это оставляет уродливый белый прямоугольник в верхнем правом углу.)

Ответы:


229

Начиная с matplotlibv1.4.0rc4 , removeметод добавлен в объект легенды.

Использование:

ax.get_legend().remove()

или

legend = ax.legend(...)
...
legend.remove()

Смотрите здесь для коммита, где это было введено.


2
По некоторым причинам ax.get_legend().remove()решение не работало в моем случае, в то время как второе решение ( legend = ax.legend() ... legend.remove()) работало. может потому что axбыл AxesSubplotв моем случае?
Джин

@naitsirhc, спасибо, что поделились.
Эндрю Ли

91

Если вы хотите построить график данных Pandas и удалить легенду, добавьте legend = None в качестве параметра к команде plot.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df2 = pd.DataFrame(np.random.randn(10, 5))
df2.plot(legend=None)
plt.show()

86

Вы можете использовать метод легенды set_visible:

ax.legend().set_visible(False)
draw()

Это основано на ответ предоставленного мне в ответ на аналогичный вопрос , который я имел некоторое время назад здесь

(Спасибо за этот ответ, Джуни - извините, я не смог пометить вопрос как ответивший ... возможно, кто-то, кто имеет полномочия, может сделать это для меня?)


4
это только скрывает легенду и фактически не удаляет объект, верно?
vlsd

16

Вы должны добавить следующие строки кода:

ax = gca()
ax.legend_ = None
draw()

gca () возвращает текущий дескриптор осей и имеет это свойство legend_


Спасибо, это похоже на работу. (Но какой ужасный интерфейс ...) Предлагаю заменить draw()на show(). Или есть особое преимущество в использовании draw?
Оливье Вердиер,

show()было бы хорошо, если бы обновление графика было последней командой программы. draw()хорошо, так как это общая команда обновления графика. Например, вы можете запросить у пользователя ввод данных в терминале после обновления графика, что невозможно сделать с помощью блокировки show().
Эрик О Лебигот

Правильно. Спасибо за ответ. Теперь я согласен, что drawэто более уместно (но я всегда использовал showдля обновления своих графиков ...).
Оливье Вердиер,

6

Если вы не используете объекты для рисования и топора, вы можете сделать это так:

import matplotlib.pyplot as plt

# do plot specifics
plt.legend('')
plt.show()

3

если вы позвоните pyplotкакplt

frameon=False это удалить границу вокруг легенды

и '' передает информацию о том, что в легенде не должно быть ни одной переменной

import matplotlib.pyplot as plt
plt.legend('',frameon=False)

1

Я сделал легенду, добавив ее к рисунку, а не к оси (matplotlib 2.2.2). Чтобы удалить его, я установил legendsатрибут рисунка в пустой список:

import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()

ax1.plot(range(10), range(10, 20), label='line 1')
ax2.plot(range(10), range(30, 20, -1), label='line 2')

fig.legend()

fig.legends = []

plt.show()

0

Согласно информации @naitsirhc, я хотел найти официальную документацию по API. Вот мои выводы и пример кода.

  1. Я создал matplotlib.Axesобъект seaborn.scatterplot().
  2. ax.get_legend()Возвращает matplotlib.legned.Legendэкземпляр.
  3. Наконец, вы вызываете .remove()функцию, чтобы удалить легенду с вашего сюжета.
ax = sns.scatterplot(......)
_lg = ax.get_legend()
_lg.remove()

Если вы проверите matplotlib.legned.Legendдокумент API, вы не увидите.remove() функцию.

Причина в том, что matplotlib.legned.Legendунаследовал matplotlib.artist.Artist. Поэтому, когда вы звоните, ax.get_legend().remove()что в основном называютmatplotlib.artist.Artist.remove() .

В конце концов, вы даже можете упростить код до двух строк.

ax = sns.scatterplot(......)
ax.get_legend().remove()
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.