如何在 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】: xaxisyaxis 是图 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 堆叠条形图?

来自seaborn facetgrid中不同数据帧的两行

使用数据框更改绘图 Seaborn Facetgrid 中同一行的线型

在 Seaborn/其他库中聚合的 FacetGrid 图