如何将各章节人物提及次数统计结果以折线图可视化?
人物提及次数统计与折线图可视化
问题背景
你拥有5个对应书籍章节的文本文件,希望统计Anna、John在各章节的提及次数,现有代码仅能打印杂乱的统计结果,需要将结果转换为折线图,每条折线代表一位人物在各章节的提及次数。
解决方案
1. 重构统计逻辑,整理结构化数据
先修改代码,将各章节的统计结果整理成人物-章节次数列表的字典结构,适配后续绘图需求:
import re # 定义要统计的目标人物 target_names = ["Anna", "John"] # 初始化统计字典:键为人物名,值为对应各章节的提及次数列表 name_counts = {name: [] for name in target_names} # 按顺序列出所有章节文件 chapter_files = ["p1.txt", "p2.txt", "p3.txt", "p4.txt", "p5.txt"] # 批量处理每个章节文件 for file_name in chapter_files: # 用with语句安全读取文件,自动关闭资源 with open(file_name, 'r', encoding='utf-8') as f: content = f.read() # 统计当前章节中每个人物的提及次数,存入对应列表 for name in target_names: count = len(re.findall(name, content)) name_counts[name].append(count) # 可选:打印整理后的统计数据 print("统计结果:") for name, counts in name_counts.items(): print(f"{name} 在各章节的提及次数:{counts}")
2. 使用Matplotlib绘制折线图
基于整理好的字典数据,用matplotlib生成折线图:
import matplotlib.pyplot as plt # 定义x轴的章节标签 chapter_labels = ["章节1", "章节2", "章节3", "章节4", "章节5"] # 遍历统计字典,为每个人物绘制折线 for name, counts in name_counts.items(): plt.plot(chapter_labels, counts, marker='o', label=name) # 设置图表样式 plt.title("人物在各章节的提及次数") plt.xlabel("章节") plt.ylabel("提及次数") plt.legend() # 显示人物图例 plt.grid(True, linestyle='--', alpha=0.7) # 添加辅助网格线 # 展示图表 plt.show()
代码说明
- 用循环批量处理文件,避免重复编写读取代码;
- 统计结果直接存入字典,每个人物对应各章节的次数列表,完美匹配折线图的数据格式;
- 绘图时添加标记点、图例和网格,让图表更直观易读。
内容的提问来源于stack exchange,提问作者futuredataengineer
相关产品推荐
相关产品推荐

