如何将Counter统计的词频数据绘制成scatter plot或bar chart?
实现词频数据的可视化(柱状图/散点图)
没问题!我来帮你把统计好的词频数据做成可视化图表,先修正下你原代码里的小疏漏(比如漏导入了csv模块),然后分别实现柱状图和散点图两种方案:
第一步:修正并整理基础代码
首先确保数据读取和统计的代码正确,我们可以把Counter的结果转换成pandas.DataFrame,这样后续可视化会更方便:
from collections import Counter import csv import matplotlib.pyplot as plt import pandas as pd data = [] with open('csv.csv') as f: # 导入csv模块后才能使用csv.reader reader = csv.reader(f) # 跳过表头(如果你的csv有表头的话,没有可以删掉这行) next(reader) data = [word for row in reader for word in row[1].lower().split()] counts = Counter(data) # 把Counter转换成DataFrame,列名设为"单词"和"出现次数" df = pd.DataFrame(counts.most_common(), columns=["单词", "出现次数"])
方案一:柱状图(适合展示高频词)
如果直接画所有单词的柱状图,大概率会因为单词太多导致标签重叠、图表拥挤,所以建议选取出现频率最高的前N个单词来展示,比如前20个:
# 取出现次数最多的前20个单词 top_n = 20 top_df = df.head(top_n) # 绘制柱状图 plt.figure(figsize=(12, 6)) # 设置图表大小 plt.bar(top_df["单词"], top_df["出现次数"], color="#4CAF50") # 添加图表标题和标签 plt.title(f"出现频率最高的{top_n}个单词", fontsize=14) plt.xlabel("单词", fontsize=12) plt.ylabel("出现次数", fontsize=12) # 旋转x轴标签,避免重叠 plt.xticks(rotation=45, ha="right") # 自动调整布局,防止标签被截断 plt.tight_layout() plt.show()
这样出来的柱状图清晰直观,能快速看到哪些单词出现得最多。
方案二:散点图(适合展示词频整体分布)
散点图可以展示所有单词的词频分布,能直观看到"长尾效应"——少数单词出现次数极高,大部分单词只出现几次:
plt.figure(figsize=(10, 6)) # x轴用单词的排序位置(按出现频率从高到低),y轴用出现次数 plt.scatter(range(len(df)), df["出现次数"], alpha=0.6, color="#2196F3") # 添加图表标题和标签 plt.title("所有单词的出现频率分布", fontsize=14) plt.xlabel("单词排序(从高频到低频)", fontsize=12) plt.ylabel("出现次数", fontsize=12) # 可以给y轴设置对数刻度,让长尾部分的细节更清晰(可选) # plt.yscale("log") plt.tight_layout() plt.show()
如果开启对数刻度,能更清楚地看到低频词的分布情况。
你可以根据自己的需求选择其中一种,或者两种都试试~
内容的提问来源于stack exchange,提问作者Stussy
相关产品推荐
相关产品推荐

