如何用Matplotlib绘制以文本文件值为X轴、频率为Y轴的折线图?
解决Matplotlib绘制值-频率折线图的问题
要实现以文本文件中的值为X轴、对应出现频率为Y轴的折线图,核心是先完成值的频率统计,再整理数据传入Matplotlib。以下是具体解决步骤和修正后的代码:
1. 统计值的出现频率
使用Python标准库collections.Counter可以快速统计每个值的出现次数,无需手动遍历计数。先读取文件中所有值,再进行统计。
2. 整理X、Y轴数据
统计完成后,将X轴的唯一值按顺序排序(保证折线图逻辑连贯),再提取对应每个值的频率作为Y轴数据。
3. 修正Matplotlib的调用错误
原代码存在多处语法错误:
- 文件重复打开且未关闭,改用
with语句自动管理文件资源 plt.xlabel = "date"是错误赋值,正确写法是plt.xlabel("date")(函数调用)- 无用的
plt.table = "test"和plt.yticks()需要移除
完整修正代码
import matplotlib.pyplot as plt from collections import Counter # 读取文件并统计频率 with open("thing.txt", "r") as f: # 读取所有行,去除换行符,收集有效值 values = [line.strip() for line in f if line.strip()] # 统计每个值的出现次数 freq_counter = Counter(values) # 整理X轴(排序后的唯一值)和Y轴(对应频率) sorted_values = sorted(freq_counter.keys()) x = sorted_values y = [freq_counter[val] for val in sorted_values] # 绘制折线图 plt.xlabel("date") plt.ylabel("Frequency Count") plt.plot(x, y, marker='o', c='g') plt.title("Value Frequency Line Chart") plt.show()
代码说明
with open(...):自动处理文件打开和关闭,避免资源泄漏Counter(values):一键统计所有值的出现频率sorted(freq_counter.keys()):对X轴的值排序,让折线图展示更直观- 修正后的
plt.xlabel()、plt.ylabel():正确设置坐标轴标签
用示例数据thing.txt运行代码后,会生成X轴为['01','03','04','05','06']、Y轴为[1,1,2,1,1]的折线图,完美展示每个值的出现频率。
内容的提问来源于stack exchange,提问作者Luke Chandler
相关产品推荐
相关产品推荐

