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

Seaborn scatterplot散点图图例日期数值显示错误解决方法

问题原因

代码中date列为整数数值类型,seabornscatterplot默认会将数值型的hue映射识别为连续变量,自动按数值取值范围生成均匀间隔的图例刻度,不会直接调用数据中实际存在的离散年份值,因此会出现原始数据中不存在的1980、1995、2025这类刻度。

实现方案

优先选择将date列转换为字符串/分类类型,强制seaborn将其识别为离散分类变量,即可让图例直接展示真实存在的年份值,代码如下:

import pandas as pd   
import seaborn as sns
import matplotlib.pyplot as plt

data = [['Sample_1', 130, 325, 1989], ['Sample_2', 128, 348, 1999], ['Sample_3', 150, 258, 2018], ['Sample_4', 171, 534, 2018], ['Sample_5', 171, 536, 2018], ['Sample_6', 278, 899, 2018], ['Sample_7', 726, 1809, 2020]]    
df = pd.DataFrame(data, columns = ['ID', 'NROH',  'SROH', 'date'])

# 核心修改:将date列转为字符串,识别为离散分类
df['date'] = df['date'].astype(str)
sns.scatterplot(x='SROH', y='NROH', hue='date', data=df)
plt.show()

运行后图例将直接显示1989、1999、2018、2020四个真实年份值,每个年份匹配独立的图例项。

如果需要保留年份的连续数值色彩映射逻辑,仅调整图例显示的刻度值,可以在绘图后手动指定图例刻度:

import pandas as pd   
import seaborn as sns
import matplotlib.pyplot as plt

data = [['Sample_1', 130, 325, 1989], ['Sample_2', 128, 348, 1999], ['Sample_3', 150, 258, 2018], ['Sample_4', 171, 534, 2018], ['Sample_5', 171, 536, 2018], ['Sample_6', 278, 899, 2018], ['Sample_7', 726, 1809, 2020]]    
df = pd.DataFrame(data, columns = ['ID', 'NROH',  'SROH', 'date'])

ax = sns.scatterplot(x='SROH', y='NROH', hue='date', data=df)
# 手动设置图例刻度为数据中实际存在的去重年份
ax.legend_.set_ticks(sorted(df['date'].unique()))
plt.show()

注:第一种离散分类的实现方式更匹配当前需求,适合年份作为独立分组、不需要体现数值连续渐变关系的绘图场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:33:12