要在matplotlib图中添加图例,只需运行legend()
。
如何从图中删除图例?
(我最接近的方法是运行legend([])
以清空图例数据。但这会在右上角留下一个丑陋的白色矩形。)
要在matplotlib图中添加图例,只需运行legend()
。
如何从图中删除图例?
(我最接近的方法是运行legend([])
以清空图例数据。但这会在右上角留下一个丑陋的白色矩形。)
从 matplotlib v1.4.0rc4
开始,图例对象添加了一个 remove
方法。
用法:
ax.get_legend().remove()
legend = ax.legend(...)
...
legend.remove()
请点击这里查看引入此项功能的提交记录。
如果您想绘制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()
legend
参数是一个布尔值,因此使用legend=False
可能更好。 - NotThatGuy您可以使用图例的set_visible
方法:
ax.legend().set_visible(False)
draw()
这是基于我之前提出的一个类似问题所获得答案的基础上 在这里
(感谢 Jouni 提供的答案 - 很抱歉我无法将问题标记为已回答...或许有权限的人可以替我这样做?)
pyplot
称为plt
,
frameon=False
是用于删除图例周围的边框,import matplotlib.pyplot as plt
plt.legend('',frameon=False)
您需要添加以下代码行:
ax = gca()
ax.legend_ = None
draw()
gca()函数返回当前坐标系的句柄,并具有legend_属性。
show()
替换draw()
。或者使用draw
有特别的优势吗? - Olivier Verdiershow()
就可以了。而draw()
则是通用的图形更新命令。例如,在更新图形后,您可能想在终端提示用户输入一些内容,这是无法使用阻塞式的show()
完成的。 - Eric O. Lebigotdraw
更为合适(但我一直使用 show
来更新图表...)。 - Olivier Verdierseaborn.scatterplot()
创建了一个 matplotlib.Axes
对象。ax.get_legend()
将返回一个 matplotlib.legend.Legend
实例。.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()
import matplotlib.pyplot as plt
# do plot specifics
plt.legend('')
plt.show()
这里是一个更复杂的示例,演示如何使用 matplotlib
和 seaborn
处理子图并删除和操作图例:
从 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)
我通过将图例添加到图形而不是坐标轴中(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()
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)
.boxplot()
方法中不起作用。 - safay
ax.get_legend().remove()
解决方案无效,而第二个解决方案 (legend = ax.legend() ... legend.remove()
) 有效。也许是因为在我的情况下ax
是一个AxesSubplot
? - Eike P..remove()
部分。我会再次尝试运行它并查看结果。 - irene