如何在 seaborn FacetGrid 中格式化 y 轴或 x 轴标签
How to format the y- or x-axis labels in a seaborn FacetGrid
我想在 seaborn FacetGrid 图中格式化 y 轴标签,带有小数位数,and/or 添加了一些文本。
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()
灵感来自
ax.xaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: '{:,.2f}'.format(x) + 'K'))
它导致以下错误。
AttributeError: 'FacetGrid' object has no attribute 'xaxis'
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 轴标签,带有小数位数,and/or 添加了一些文本。
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()
灵感来自
ax.xaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: '{:,.2f}'.format(x) + 'K'))
它导致以下错误。
AttributeError: 'FacetGrid' object has no attribute 'xaxis'
xaxis
和yaxis
是图axes
的属性,用于seaborn.axisgrid.FacetGrid
类型。- 在链接的答案中,类型是
matplotlib.axes._subplots.AxesSubplot
- 在链接的答案中,类型是
p
为刻度标签号。- seaborn: Building structured multi-plot grids
- matplotlib: Creating multiple subplots
- 测试并使用以下版本:
matplotlib v3.3.4
seaborn v0.11.1
lambda
表达式中的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')