删除matplotlib图上的图例

时间:2011-04-20 18:54:38

标签: matplotlib legend

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

如何从图中删除图例?

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

9 个答案:

答案 0 :(得分:134)

matplotlib v1.4.0rc4起,remove方法已添加到图例对象中。

用法:

ax.get_legend().remove()

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

请参阅here以了解引入此内容的提交。

答案 1 :(得分:78)

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

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

这是基于我在回答一段时间前的类似问题时提供给我的答案here

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

答案 2 :(得分:61)

如果要绘制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()

答案 3 :(得分:17)

您必须添加以下代码行:

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

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

答案 4 :(得分:3)

如果您以pyplot的身分呼叫plt

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

和''传递的信息是图例中不得包含变量

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

答案 5 :(得分: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()

答案 6 :(得分:1)

根据@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()

答案 7 :(得分:0)

如果您不使用无花果和斧头图对象,可以这样做:

import matplotlib.pyplot as plt

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

答案 8 :(得分:0)

如果您使用的是 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)