Python统计蜘蛛科出现频次并绘制TOP10类群频次分布图问题咨询
蜘蛛科Top10频次可视化实现方案
- 先统计带数值的Top10结果,避免单独取索引后还要重新匹配数值:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 若科名包含中文可保留以下两行配置字体,无中文可删除 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False n = 10 # 直接保留Top10的科名和对应频次 top10_family_counts = dfc['family'].value_counts().head(n)
- 方案1:基于matplotlib绘制水平条形图(更适配较长的科名展示)
plt.figure(figsize=(10, 6)) # 绘制水平条形图 plt.barh(top10_family_counts.index, top10_family_counts.values, color='#3498db') # 设置标签与标题 plt.xlabel('出现频次', fontsize=12) plt.ylabel('蜘蛛科名称', fontsize=12) plt.title('出现频次Top10蜘蛛科分布', fontsize=14, pad=15) # 调整排序让频次最高的科显示在最上方 plt.gca().invert_yaxis() # 为每个条形添加数值标注 for idx, val in enumerate(top10_family_counts.values): plt.text(val + 1, idx, str(val), va='center') plt.tight_layout() plt.show()
- 方案2:基于seaborn绘制风格更统一的条形图
plt.figure(figsize=(10, 6)) # 转换为DataFrame适配seaborn接口 plot_data = top10_family_counts.reset_index() plot_data.columns = ['family', 'count'] sns.barplot(data=plot_data, x='count', y='family', palette='Blues_r') plt.xlabel('出现频次', fontsize=12) plt.ylabel('蜘蛛科名称', fontsize=12) plt.title('出现频次Top10蜘蛛科分布', fontsize=14, pad=15) # 添加数值标注 for idx, val in enumerate(plot_data['count']): plt.text(val + 1, idx, str(val), va='center') plt.tight_layout() plt.show()
可选调整说明
- 若需要垂直条形图,将
barh替换为bar,互换x、y轴的取值即可 - 可通过调整
figsize参数修改图表尺寸,通过color/palette参数修改配色 - 数值标注的偏移量(代码中的
+1)可根据实际数值范围调整,避免文字溢出
内容的提问来源于stack exchange,提问作者Swat1999
相关产品推荐
相关产品推荐

