如何基于pandas dataframe绘制词频分布直方图?
Pandas 词频数据集绘制直方图实现方案
你的数据集为包含词汇、对应词频两列的结构化DataFrame,可直接基于现有数据完成绘图,以下是两种常用的最优实现方案:
方案1:使用Pandas内置绘图(无需额外依赖,操作最简单)
适合快速出图的场景,代码如下:
import pandas as pd import matplotlib.pyplot as plt # 替换为你自己的DataFrame变量名 # 可自行调整top_n的数值,选择展示词频最高的前N个词汇,避免X轴标签拥挤 top_n = 20 plot_data = df.sort_values('frequency', ascending=False).head(top_n) # 绘制分类词频条形图(对应离散词汇的词频展示) plot_data.plot(kind='bar', x='word', y='frequency', figsize=(12,6), color='#3498db') # 图表美化配置 plt.title(f'Top {top_n} 词汇词频分布', fontsize=14) plt.xlabel('词汇', fontsize=12) plt.ylabel('词频', fontsize=12) plt.xticks(rotation=45, ha='right') plt.tight_layout() plt.show()
方案2:使用Seaborn绘制(样式更美观,可定制性更强)
适合需要输出高质量可视化结果的场景,代码如下:
import seaborn as sns import matplotlib.pyplot as plt top_n = 20 plot_data = df.sort_values('frequency', ascending=False).head(top_n) plt.figure(figsize=(12,6)) sns.barplot(data=plot_data, x='word', y='frequency', palette='Blues_r') plt.title(f'Top {top_n} 词汇词频分布', fontsize=14) plt.xlabel('词汇', fontsize=12) plt.ylabel('词频', fontsize=12) plt.xticks(rotation=45, ha='right') plt.tight_layout() plt.show()
特殊场景:词频数值分布直方图
如果你需要统计不同词频区间对应的词汇数量,绘制连续数值分布的直方图,使用以下代码:
import matplotlib.pyplot as plt # bins参数可调整区间划分的数量 df['frequency'].plot(kind='hist', bins=20, figsize=(10,6), edgecolor='black') plt.title('词频数值分布直方图', fontsize=14) plt.xlabel('词频区间', fontsize=12) plt.ylabel('对应词汇数量', fontsize=12) plt.show()
常见问题排查
如果绘图失败可优先检查以下配置:
- 确认词频列数据类型为数值型,若为字符串可先转换:
df['frequency'] = df['frequency'].astype(int) - 列名替换为你实际DataFrame对应的列名,不要直接照搬示例中的
word、frequency
内容的提问来源于stack exchange,提问作者Laily
相关产品推荐
相关产品推荐

