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

使用Seaborn绘制年龄计数图仅显示单块图形的问题排查

问题:Seaborn计数图与预期效果不符

期望实现的效果

期望实现的效果

我使用的代码

from pandas import *
from matplotlib.pyplot import *
from math import *

import numpy as num
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
%matplotlib inline

import seaborn as sns

import statistics

users = pd.read_table("/content/drive/MyDrive/Colab Notebooks/Datasets/users.dat",sep="::",names=['UserID','Gender','Age','Occupation','ZipCode'],encoding='latin-1')

users['Age'].value_counts()
sns.countplot(users["Age"])

实际得到的效果

实际得到的效果

已做的排查

  • 更换过数据文件确认数据正确性
  • 检查代码拼写错误
  • 尝试使用单引号索引列
  • 目前怀疑是数据本身的问题

数据文件来源:Google Drive(链接已省略)


解决方案

问题出在Age列的排序逻辑上:Seaborn的countplot默认会按数据中类别出现的顺序或频率排序,而你期望的是按年龄从小到大的逻辑顺序展示。

步骤1:确认Age列的数据类型

先查看Age列的类型:

print(users['Age'].dtype)

这类数据里Age通常是字符串类型,而非数值型,所以无法自动按数值排序。

步骤2:设置有序分类或指定排序顺序

两种方法任选其一:

方法一:将Age转为有序分类

# 定义年龄的逻辑顺序
age_order = ['1', '18', '25', '35', '45', '50', '56']
# 转换为有序分类
users['Age'] = pd.Categorical(users['Age'], categories=age_order, ordered=True)
# 绘制计数图
sns.countplot(x='Age', data=users)
plt.show()

方法二:在countplot中直接指定order参数

age_order = ['1', '18', '25', '35', '45', '50', '56']
sns.countplot(x='Age', data=users, order=age_order)
plt.show()

执行后就能得到和预期一致、按年龄逻辑顺序排列的计数图。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:46:30