减少图例 sns 中的小数

Posted

技术标签:

【中文标题】减少图例 sns 中的小数【英文标题】:reduce decimals in legend sns 【发布时间】:2021-01-04 13:04:06 【问题描述】:

我只想在图例中显示hrmin

ax = sns.lineplot(x="time", y="qL",
                  hue="hr", style="hr", ci=0, palette="tab10",
                  markers=True, dashes=False, legend="full", data=file)

这是我尝试过的,但显然它不起作用。我还附上了结果图。

plt.setp(ax.get_legend().get_texts()[:4])

【问题讨论】:

plt.setp 在这里帮不了你。您可以像这样操作图例文本:for text in legend.texts: text.set_text(...)。看到这个答案:***.com/questions/38707853/… 【参考方案1】:

回答

你可以:

ax.get_legend_handles_labels()提取当前图例标签 然后使用new_labels = [label[:-3] for label in labels] 操作它们 最后,通过ax.legend()设置新标签。

例如,请参见下面的代码。

代码

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.plot([0, 1], [1, 2], label = '08:00:00')
ax.plot([0, 1], [2, 0], label = '10:30:00')
ax.legend(title = 'hr')

handles, labels = ax.get_legend_handles_labels()
new_labels = [label[:-3] for label in labels]
ax.legend(handles, new_labels, title = 'hr')

plt.show()

输出

注意

首先我添加了一个带有ax.legend(title = 'hr')的图例标题,如果你使用seaborn,它会自动完成。但是,ax.get_legend_handles_labels() 不提取图例标题,仅提取标签。这样在设置新标签时,需要用ax.legend(handles, new_labels, title = 'hr')再次指定图例标题。也许有更优雅的方式来做到这一点。

【讨论】:

以上是关于减少图例 sns 中的小数的主要内容,如果未能解决你的问题,请参考以下文章

seaborn中的图例重叠绘图区域[重复]

如何减少八度图例功能中的空白

Seaborn 散点图

如何将图例添加到 sns 子图?

更改 sns 散点图中的图例

更改图例标签时,Matplotlib 图例颜色会发生变化