如何删除Seaborn FacetGrid单个子图的xticks同时保留其他子图的分类顺序与刻度间距
Seaborn FacetGrid 单张子图删除冗余分类刻度解决方案
完整可运行代码
import pandas as pd import numpy as np import seaborn as sns # 测试数据构造 df = pd.DataFrame() df['Value'] = np.random.rand(100) df['Cat1'] = np.random.choice(['yes', 'no', 'maybe'], 100) df['Cat2'] = np.random.choice(['Blue', 'Red'], 100) # 过滤Red分组下的maybe分类 df = df[~((df.Cat1 == 'maybe') & (df.Cat2 == 'Red'))] # 绘图保留全局order保证分类顺序统一 g = sns.catplot( data=df, x='Cat1', y='Value', col='Cat2', col_order=['Red', 'Blue'], order=['yes', 'no', 'maybe'], sharex=False, color='black' ) # 处理Red分组对应的第一张子图 red_ax = g.axes.flat[0] # 仅保留有数据的前两个分类的刻度和标签 red_ax.set_xticks([0, 1]) red_ax.set_xticklabels(['yes', 'no']) # 调整x轴范围保证刻度间距和Blue子图一致 red_ax.set_xlim(-0.5, 1.5)
方案说明
- 保留
order参数固定全局分类顺序,直接解决分类顺序不符合预期的问题 - 单独操作Red分组子图的x轴配置,删除无数据的
maybe分类对应刻度,避免空占位 - 通过手动设置Red子图的x轴范围,保证两个子图单个分类的宽度、刻度间距完全一致,解决刻度间距不协调的问题
内容的提问来源于stack exchange,提问作者Pierre
相关产品推荐
相关产品推荐

