删除matplotlib图上的图例

Oli*_*ier 132 matplotlib legend

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

如何从情节中删除图例?

(我最接近的是运行legend([])以便从数据中清空图例.但是在右上角留下了一个丑陋的白色矩形.)

nai*_*rhc 168

matplotlib开始v1.4.0rc4,一个remove方法已被添加到图例对象中.

用法:

ax.get_legend().remove()
Run Code Online (Sandbox Code Playgroud)

要么

legend = ax.legend(...)
...
legend.remove()
Run Code Online (Sandbox Code Playgroud)

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

  • 最好使用`ax.get_legend().remove()`来保持在matplotlib的内部之外. (5认同)
  • 出于某种原因,`ax.get_legend().remove()` 解决方案在我的情况下不起作用,而第二个解决方案 (`legend = ax.legend() ... legend.remove()`) 有效。也许是因为在我的情况下,`ax` 是一个 `AxesSubplot`? (5认同)

小智 81

您可以使用图例的set_visible方法:

ax.legend().set_visible(False)
draw()
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这只隐藏了传说,它实际上并没有删除对象,对吧? (4认同)

cas*_*t42 69

如果要绘制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()
Run Code Online (Sandbox Code Playgroud)


fce*_*uti 16

你必须添加以下代码行:

ax = gca()
ax.legend_ = None
draw()
Run Code Online (Sandbox Code Playgroud)

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


And*_* Li 10

根据@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()
Run Code Online (Sandbox Code Playgroud)

如果你查看matplotlib.legned.LegendAPI文档,你不会看到这个.remove()函数。

原因是继承matplotlib.legned.Legendmatplotlib.artist.Artist. 因此,当你调用ax.get_legend().remove()它时,基本上会调用matplotlib.artist.Artist.remove().

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

ax = sns.scatterplot(......)
ax.get_legend().remove()
Run Code Online (Sandbox Code Playgroud)


Div*_*ing 9

如果你调用pyplot作为plt

frameon=False 是去除图例周围的边框

并且 '' 正在传递图例中不应有任何变量的信息

import matplotlib.pyplot as plt
plt.legend('',frameon=False)
Run Code Online (Sandbox Code Playgroud)


Pel*_*loa 7

如果您不使用 fig 和 ax 绘图对象,您可以这样做:

import matplotlib.pyplot as plt

# do plot specifics
plt.legend('')
plt.show()
Run Code Online (Sandbox Code Playgroud)

  • 将图例保留为空框 (5认同)

bou*_*n21 5

我通过将其添加到图形而不是轴(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()
Run Code Online (Sandbox Code Playgroud)


Ony*_*nyr 5

matplotlib这是一个更复杂的图例删除和操作以及seaborn处理子图的示例:

从seaborn 获取由@naitsirhcAxes创建的对象sns.<some_plot>()ax.get_legend().remove()按照@naitsirhc 的指示执行操作。下面的示例还展示了如何将图例放在一边,以及如何处理子图的上下文。

# imports
import seaborn as sns
import matplotlib.pyplot as plt

# get data
sns.set()
sns.set_theme(style="darkgrid")
tips = sns.load_dataset("tips")

# subplots
fig, axes = plt.subplots(1, 2, sharex=True, sharey=True, figsize=(12,6)) 
fig.suptitle('Example of legend manipulations on subplots with seaborn')

g0 = sns.pointplot(ax=axes[0], data=tips, x="day", y="total_bill", hue="size")
g0.set(title="Pointplot with no legend")
g0.get_legend().remove() # <<< REMOVE LEGEND HERE 

g1 = sns.swarmplot(ax=axes[1], data=tips, x="day", y="total_bill", hue="size")
g1.set(title="Swarmplot with legend aside")
# change legend position: https://www.statology.org/seaborn-legend-position/
g1.legend(bbox_to_anchor=(1.02, 1), loc='upper left', borderaxespad=0)
Run Code Online (Sandbox Code Playgroud)

使用seaborn对子图进行图例操作的示例