Python基于Counter计数结果绘制Barplot方法及选型解答
基于Counter计数结果绘制柱状图的实现方法
具体实现步骤
你拿到的Counter对象是字典的子类,可以直接提取分类标签和对应计数值,用matplotlib或者seaborn都可以快速绘制柱状图,以下是可直接运行的示例代码:
首先提前导入需要的依赖,你已经生成的Counter结果可以直接复用,不需要重复计算:
from collections import Counter import matplotlib.pyplot as plt import seaborn as sns import pandas as pd # 这部分是你已经得到的Counter统计结果,直接复用即可 genre_counts = Counter({'Action': 303, 'Adventure': 259, 'Sci-Fi': 120, 'Mystery': 106, 'Horror': 119, 'Thriller': 195, 'Animation': 49, 'Comedy': 279, 'Family': 51, 'Fantasy': 101, 'Drama': 513, 'Music': 16, 'Biography': 81, 'Romance': 141, 'History': 29, 'Crime': 150, 'Western': 7, 'War': 13, 'Musical': 5, 'Sport': 18})
方法1:纯Matplotlib实现
不需要额外安装可视化库,直接用matplotlib即可完成绘制。由于题材名称较长,推荐用横向柱状图避免标签重叠:
# 先把分类按计数从高到低排序,更符合阅读逻辑 sorted_genres = sorted(genre_counts.items(), key=lambda x: x[1], reverse=True) genres = [item[0] for item in sorted_genres] counts = [item[1] for item in sorted_genres] plt.figure(figsize=(10, 8)) # 横向柱状图调用barh,纵向柱状图调用bar即可 plt.barh(genres, counts) plt.gca().invert_yaxis() # 反转y轴,把计数最高的类别放在最顶部 plt.xlabel('作品数量') plt.ylabel('题材类型') plt.title('不同题材作品数量统计') # 给每个柱子加上具体数值标签,不用读者对照坐标轴估算 for index, value in enumerate(counts): plt.text(value + 3, index, str(value), va='center') plt.tight_layout() # 自动调整布局,避免标签被截断 plt.show()
方法2:Seaborn实现(样式更简洁美观)
把Counter结果转成pandas DataFrame后,调用seaborn的barplot接口即可快速生成样式统一的图表:
# 转换为DataFrame格式并按计数降序排序 df = pd.DataFrame(genre_counts.items(), columns=['genre', 'count']).sort_values(by='count', ascending=False) plt.figure(figsize=(10,8)) sns.barplot(data=df, y='genre', x='count', palette='viridis') plt.xlabel('作品数量') plt.ylabel('题材类型') plt.title('不同题材作品数量统计') plt.tight_layout() plt.show()
关于柱状图是否为这类数据最优选择的说明
- 对你当前20个分类的计数场景,柱状图是最优选择之一:它可以清晰呈现不同分类的数值差异,读者可以快速对比不同题材的数量多少、排序关系,一眼识别出最高频(Drama)和最低频(Musical)的类别。
- 几个优化注意点:
- 分类标签较长时优先选横向柱状图,避免纵向柱状图的x轴标签旋转重叠,大幅降低可读性
- 一定要先对计数做排序再绘图,不要按原始乱序排列,排序后可以更直观体现频次梯度
- 如果分类数量超过30个,建议先筛选Top N的高频分类展示,剩余低频分类合并为「其他」,避免柱子过多过密无法阅读
- 不推荐用饼图展示这类多分类计数:当分类数超过5个时,人眼很难准确区分面积相近的扇形大小,比如你数据里Sci-Fi(120)和Horror(119)数值几乎一致,饼图完全无法体现两者的微小差异,对比效率远低于柱状图。
内容的提问来源于stack exchange,提问作者Scott Campbell
相关产品推荐
相关产品推荐

