You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义seaborn catplot各子图的y轴刻度文本标签

问题原因

对于分类类型的坐标轴,Matplotlib 内部会将分类标签映射为从0开始的连续整数位置,你调用FuncFormatter时拿到的第一个参数x本质是刻度对应的数值位置,不是你以为的原始文本标签,所以才会出现x和pos取值一致,输出的标签变成(1) 0这类不符合预期的结果。

正确实现方案

不用依赖FuncFormatter,直接读取现有刻度的文本标签后修改再回设即可,兼容你当前使用的matplotlib 3.4.3、seaborn 0.11.2版本,代码如下:

titanic = sns.load_dataset("titanic")

fg = sns.catplot(x="age", y="embark_town",
                hue="sex", row="class",
                data=titanic[titanic.embark_town.notnull()],
                orient="h", height=2, aspect=3, palette="Set3",
                kind="violin", dodge=True, cut=0, bw=.2)

for ax in fg.axes.flat:
    # 读取原有刻度文本
    original_labels = [label.get_text() for label in ax.get_yticklabels()]
    # 生成带序号的新标签
    new_labels = [f"({i+1}) {text}" for i, text in enumerate(original_labels)]
    # 回设新标签
    ax.set_yticklabels(new_labels)

执行后即可得到(1) Southampton、(2) Cherbourg、(3) Queenstown格式的y轴刻度标签。

内容的提问来源于stack exchange,提问作者MarcoS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:24:03