如何自定义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
相关产品推荐
相关产品推荐

