合并行生成「Other」行,优化100分类变量条形图可读性
处理大量分类变量的可视化方案
一、合并小类别为「Other」
针对你需要将计数小于5的品牌归入「Other」的需求,用Python pandas可以快速实现:
import pandas as pd # 假设你的数据集存储在df中,品牌列名为'brand' # 1. 计算各品牌的出现次数 brand_counts = df['brand'].value_counts() # 2. 筛选出计数≥5的品牌 qualified_brands = brand_counts[brand_counts >= 5].index # 3. 生成分组后的品牌列 df['brand_grouped'] = df['brand'].map(lambda x: x if x in qualified_brands else 'Other') # 4. 绘制分组后的条形图 df['brand_grouped'].value_counts().plot(kind='bar')
处理后类别数量会大幅缩减,条形图的可读性会明显提升。
二、其他适合100个分类变量的可视化方法
如果不想合并类别,以下方法也能解决可读性问题:
- 横向条形图:将类别标签放在Y轴,避免长标签重叠,搭配计数排序能快速定位高频类别:
df['brand'].value_counts().sort_values().plot(kind='barh') - 树状图(Treemap):用面积大小体现各品牌的计数占比,适合展示大量类别的分布关系:
import plotly.express as px # 转换为计数数据框 count_df = df['brand'].value_counts().reset_index(name='count') fig = px.treemap(count_df, path=['brand'], values='count') fig.show() - 点图(Dot Plot):仅用点表示每个类别的计数,减少视觉冗余,更清晰对比大量类别的数值差异:
import seaborn as sns count_df = df['brand'].value_counts().reset_index(name='count') sns.stripplot(data=count_df, x='count', y='brand', orient='h') - 有序条形图:不管用横向还是纵向,先按计数从高到低排序,能让图表逻辑更清晰,避免杂乱无章的视觉体验。
内容的提问来源于stack exchange,提问作者Ashley Budyak
相关产品推荐
相关产品推荐

