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

如何让Seaborn散点图Y轴固定显示Yes/No/Critical并保持顺序

解决Seaborn散点图固定Y轴类别问题

要让Y轴始终显示指定的三个类别(顶部"No"、中间"Critical"、底部"Yes"),核心是把Y轴对应的列转换为有序分类类型,强制指定类别集合和显示顺序,这样即便某类别无数据,轴标签也会保留。

修改步骤及完整代码

  1. 将数据中的Y列转为有序分类,明确指定类别顺序(Matplotlib Y轴默认从下到上渲染,所以类别列表按从下到上的顺序写:["Yes", "Critical", "No"])
  2. 补充调色板中"Critical"对应的颜色,避免颜色缺失
  3. 保留原代码的其他设置
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:12:17