减少图例 sns 中的小数
Posted
技术标签:
【中文标题】减少图例 sns 中的小数【英文标题】:reduce decimals in legend sns 【发布时间】:2021-01-04 13:04:06 【问题描述】:我只想在图例中显示hr
和min
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 中的小数的主要内容,如果未能解决你的问题,请参考以下文章