删除matplotlib图上的图例

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

如何删除一个传说从一个情节?

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

322822 次浏览

你必须添加以下几行代码:

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

Gca()返回当前坐标轴句柄,并具有传奇_属性

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

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

这是基于一个回答提供给我的一个类似的问题,我有一段时间以前在这里

(谢谢你的回答,Jouni -我很抱歉我不能把问题标记为回答…也许有权威的人可以为我做这件事?)

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

用法:

ax.get_legend().remove()

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

请参阅在这里以获得引入该函数的提交。

如果你想绘制一个Pandas数据帧,并且想要删除图例,在plot命令中添加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()

我将图例添加到图形中,而不是添加到轴上(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()

如果你不使用fig和ax plot对象,你可以这样做:

import matplotlib.pyplot as plt


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

如果你将pyplot调用为plt

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

“传递的信息是,图例中不应该有变量

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

根据@naitsirhc提供的信息,我想找到官方的API文档。下面是我的发现和一些示例代码。

  1. 我通过seaborn.scatterplot()创建了一个matplotlib.Axes对象。
  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()

如果你使用seaborn,你可以使用参数legend。即使你在同一个数字上画了不止一次。使用一些df的例子

import seaborn as sns


# Will display legend
ax1 = sns.lineplot(x='cars', y='miles', hue='brand', data=df)


# No legend displayed
ax2 = sns.lineplot(x='cars', y='miles', hue='brand', data=df, legend=None)

下面是一个更复杂的例子,使用matplotlibseaborn处理子图来删除和操作图例:

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

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

 subplots with seaborn的图例操作示例

你可以简单地这样做:

axs[n].legend(loc='upper left',ncol=2,labelspacing=0.01)

< p > for i in [4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]: axs[i].legend([]) < / p >