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
相关产品推荐
相关产品推荐

