如何在 seaborn FacetGrid 中格式化 y 轴或 x 轴标签
Posted
技术标签:
【中文标题】如何在 seaborn FacetGrid 中格式化 y 轴或 x 轴标签【英文标题】:How to format the y- or x-axis labels in a seaborn FacetGrid 【发布时间】:2020-12-21 22:03:38 【问题描述】:我想在 seaborn FacetGrid 图中格式化 y 轴标签,带有多个小数,和/或添加一些文本。
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="ticks")
exercise = sns.load_dataset("exercise")
g = sns.catplot(x="time", y="pulse", hue="kind", col="diet", data=exercise)
#g.xaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: ':,.2f'.format(x) + 'K'))
#g.set(xticks=['a','try',0.5])
g.yaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: ':,.2f'.format(x) + 'K'))
plt.show()
灵感来自How to format seaborn/matplotlib axis tick labels from number to thousands or Millions? (125,436 to 125.4K)
ax.xaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: ':,.2f'.format(x) + 'K'))
这会导致以下错误。
AttributeError: 'FacetGrid' object has no attribute 'xaxis'
【问题讨论】:
【参考方案1】:xaxis
和 yaxis
是图 axes
的属性,用于 seaborn.axisgrid.FacetGrid
类型。
在链接的答案中,类型是matplotlib.axes._subplots.AxesSubplot
lambda
表达式中的p
是刻度标签编号。
seaborn: Building structured multi-plot grids
matplotlib: Creating multiple subplots
经过测试并使用以下版本:
matplotlib v3.3.4
seaborn v0.11.1
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.ticker as tkr
sns.set(style="ticks")
# load data
exercise = sns.load_dataset("exercise")
# plot data
g = sns.catplot(x="time", y="pulse", hue="kind", col="diet", data=exercise)
# format the labels with f-strings
for ax in g.axes.flat:
ax.yaxis.set_major_formatter(tkr.FuncFormatter(lambda y, p: f'y:.2f: Oh baby, baby'))
ax.xaxis.set_major_formatter(tkr.FuncFormatter(lambda x, p: f'x: Is that your best'))
正如Patrick FitzGerald 的评论中所指出的,以下代码在不使用tkr.FuncFormatter
的情况下也可以生成上一个图。
见matplotlib.axis.Axis.set_major_formatter
# format the labels with f-strings
for ax in g.axes.flat:
ax.yaxis.set_major_formatter(lambda y, p: f'y:.2f: Oh baby, baby')
ax.xaxis.set_major_formatter(lambda x, p: f'x: Is that your best')
【讨论】:
感谢您的明确回答,并花时间解释:非常有用。以上是关于如何在 seaborn FacetGrid 中格式化 y 轴或 x 轴标签的主要内容,如果未能解决你的问题,请参考以下文章
如何反转 seaborn 图形级别图的轴(FacetGrid)
如何使用 seaborn FacetGrid 更改字体大小?
如何使用 Seaborn 创建 FacetGrid 堆叠条形图?