如何让Seaborn散点图Y轴固定显示Yes/No/Critical并保持顺序
解决Seaborn散点图固定Y轴类别问题
要让Y轴始终显示指定的三个类别(顶部"No"、中间"Critical"、底部"Yes"),核心是把Y轴对应的列转换为有序分类类型,强制指定类别集合和显示顺序,这样即便某类别无数据,轴标签也会保留。
修改步骤及完整代码
- 将数据中的Y列转为有序分类,明确指定类别顺序(Matplotlib Y轴默认从下到上渲染,所以类别列表按从下到上的顺序写:
["Yes", "Critical", "No"]) - 补充调色板中"Critical"对应的颜色,避免颜色缺失
- 保留原代码的其他设置
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np import os # 处理Y列为有序分类,固定类别和顺序 resframe["Here is a text"] = pd.Categorical( resframe["Here is a text"], categories=["Yes", "Critical", "No"], # 对应底部Yes、中间Critical、顶部No的显示顺序 ordered=True ) plt.figure() # 补充Critical的颜色到调色板 ax = sns.scatterplot( x="Simulation number", y="Here is a text", hue='Here is again a text', data=resframe.round(2), legend=False, palette=dict(Yes="#ff7f0e", No="#1f77b4", Critical="#2ca02c") ) x_lim = ax.get_xlim() ax.set_xticks(np.arange(0, x_lim[1], 10)) ax.grid(True, linestyle='--', color='gray', alpha=0.7, which='major', axis='x') plt.savefig(os.path.join(new_path_p, 'file_title.png'), dpi=300, bbox_inches='tight')
说明
- 转为有序分类后,Seaborn会严格按照指定的类别列表渲染Y轴,不受数据中是否存在对应类别的影响
- 调色板补充"Critical"的颜色是为了兼容该类别有数据的场景,可根据需求自行调整颜色值
- 类别顺序的设置直接对应Y轴的上下位置,确保显示效果符合要求
内容的提问来源于stack exchange,提问作者Malouu
相关产品推荐
相关产品推荐

