删除matplotlib图上的图例


169

要将图例添加到matplotlib图中,只需运行即可legend()

如何从情节中删除图例?

(我最接近的是运行legend([])该命令以从数据中清空图例。但这在右上角留下了一个难看的白色矩形。)

Answers:


230

matplotlib开始v1.4.0rc4remove已将一个方法添加到图例对象。

用法:

ax.get_legend().remove()

要么

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

请参阅此处以了解引入的提交。


2
由于某种原因,该ax.get_legend().remove()解决方案在我的情况下不起作用,而第二个解决方案(legend = ax.legend() ... legend.remove())起作用。也许是因为ax是一个AxesSubplot在我的情况?
jhin

@naitsirhc,谢谢您的分享。
李彦宏

90

如果要绘制Pandas数据框并要删除图例,请在图例命令中添加legend = None作为参数。

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()

这是基于提供给我的响应类似的问题,我一个答案了,前一段时间在这里

(感谢您的回答,Jouni-对不起,我无法将问题标记为已回答...也许有权威的人可以为我这样做?)


4
这只会隐藏图例,而实际上并不会删除对象,对吗?
vlsd

16

您必须添加以下代码行:

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

gca()返回当前的轴手柄,并具有该属性legend_


谢谢,这似乎行得通。(但是,什么是可怕的接口...),我建议更换draw()show()。还是使用有特别的优势draw
Olivier Verdier

show()如果图形更新是程序的最后一个命令,则可以。 draw()很好,因为它是常规图形更新命令。例如,您可能想要在更新图形后提示用户在终端中进行某些输入,而这无法通过阻塞完成show()
Eric O Lebigot

对。感谢你的回答。现在,我认为这draw更合适(但我一直都习惯于show更新图表...)。
Olivier Verdier


3

如果您致电pyplotplt

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.LegendAPI文档,则不会看到该.remove()功能。

原因是matplotlib.legned.Legend继承了matplotlib.artist.Artist。因此,当您致电时ax.get_legend().remove(),基本上就是matplotlib.artist.Artist.remove()

最后,您甚至可以将代码简化为两行。

ax = sns.scatterplot(......)
ax.get_legend().remove()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.