Видаліть легенду на фігурі matplotlib


169

Щоб додати легенду до сюжету про матплотліб, просто запускається legend().

Як вилучити легенду з сюжету?

(Найближче до цього я прийшов - це запустити legend([]), щоб виповнити легенду з даних. Але це залишає потворний білий прямокутник у верхньому правому куті.)

Відповіді:


229

Станом на matplotlibv1.4.0rc4 , removeдо об’єкта legend додано метод.

Використання:

ax.get_legend().remove()

або

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

Дивіться тут на комітеті, де це було внесено.


2
Чомусь ax.get_legend().remove()рішення не працювало в моєму випадку, тоді як друге рішення ( legend = ax.legend() ... legend.remove()) працювало. можливо тому, що axбуло AxesSubplotв моєму випадку?
jhin

@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.