python - 完全删除图例句柄和标签
问题描述
一些绘图工具,例如seaborn
自动标记绘图并添加图例。使用 删除图例相当容易ax.get_legend().remove()
,但句柄和标签仍存储在轴对象中的某个位置。因此,当添加另一条线或其他绘图类型时,我想要为其添加一个图例,“旧”图例句柄和标签也会显示。换句话说:ax.get_legend_handles_labels()
仍然返回由 fi seaborn 引入的标签和句柄。
有没有办法从轴上完全删除用于图例的句柄和标签?就这样ax.get_legend_handles_labels()
返回([], [])
?
我知道我可以sns.lineplot(..., legend=False)
在 seaborn 中设置。我只是在使用 seaborn 来制作一个很好的例子。问题是一般如何删除现有的图例标签和句柄。
这是一个最小的工作示例:
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
df = pd.DataFrame(data={
'x': [0, 1, 0, 1],
'y': [7.2, 10., 11.2, 3.],
'id': [4, 4, 7, 7]
})
# get mean per x location:
grpd = df.groupby('x').mean()
ax = sns.lineplot(data=df, x='x', y='y', hue='id', palette=['b', 'g'])
ax.get_legend().remove()
# this still returns the handles and labels:
print(ax.get_legend_handles_labels())
# Out:
# ([<matplotlib.lines.Line2D at 0x17c1c208f88>,
# <matplotlib.lines.Line2D at 0x17c1c1f8888>,
# <matplotlib.lines.Line2D at 0x17c1c20af88>],
# ['id', '4', '7'])
# plot some other lines, for which I want to have a legend:
ax.plot(grpd.index, grpd['y'], label='mean')
# add legend, ONLY FOR MEAN, if possible:
ax.legend()
我尝试使用 操纵轴ax.get_legend()
和ax.legend_
对象 fi ax.legend_.legendHandles = []
,设置标签、文本和其他所有内容,但“旧”的 seaborn 条目每次都会重新出现。
由于这意味着在模块中使用,因此显式设置仅包含“均值”条目的图例是不适用的。我需要“清除”后端发生的所有事情,以便为用户提供干净的 API。
解决方案
改变:
ax = sns.lineplot(data=df, x='x', y='y', hue='id', palette=['b', 'g'])
到:
ax = sns.lineplot(data=df, x='x', y='y', hue='id', palette=['b', 'g'], legend=False)
这样,您也不需要调用来删除图例,因为一开始就没有创建任何图例。
编辑更新:
如果要清除图例句柄和标签,我认为您必须执行以下操作:
for line in ax.lines: # put this before you call the 'mean' plot function.
line.set_label(s='')
这将遍历绘图上绘制的线条,然后将它们的标签设置为空。这样图例就不会考虑它们,并且print(ax.get_legend_handles_labels())
将返回空的可迭代对象。
推荐阅读
- c - 如何根据用户给出的数字打印带有文本的金字塔?
- python - 正确重塑该数据框的最佳方法
- html - 删除 HTML 页面中的部分 HTML
- python - 安装 PyHook python 3.7 64 位
- google-sheets - 谷歌表格中是否有最大数量的命名范围
- python - 有人可以解释这个 Google Colab 代码中的不同索引吗?
- sql - 选择查询中带有计数的内部联接
- android - 当视频视图处于全屏状态时,RecyclerView 被重新创建
- chapel - 浮点数的`writeln()`的输出精度
- matplotlib - 为 Jupyter 笔记本全局设置轴标签