Python matplotlib如何读取文件在同一窗口生成多个图表
实现方法
你要在同一个窗口绘制两个txt文件的图表,核心逻辑很简单:分别加载两个文件的数据,依次在同一个画布上绘制两条折线,最后统一展示即可,不需要复杂的子图操作。
具体步骤
- 先把单文件读取的逻辑封装成复用函数,避免重复写两遍相同的读取代码,传入文件路径就能直接返回绘图需要的时间序列、统计值序列
- 调用函数分别读取两个txt文件的绘图数据
- 连续调用两次
plt.plot()绘制两条折线,给两条线设置不同的颜色、标记样式,加上图例方便区分来源 - 所有绘图配置完成后,最后调用一次
plt.show()弹出窗口即可,不要在绘制单条线之后就调用show方法,会提前清空画布
参考代码
基于你原来的代码修改,尽量保留了你熟悉的写法,只需要把第二个文件的文件名换成你自己的实际文件名就能运行:
import matplotlib.pyplot as plt # 封装数据读取逻辑 def load_data(file_path): timecap = [] qtd = [] # 用with写法会自动关闭文件,比直接open更稳妥 with open(file_path, 'r') as f: for line in f: # 去掉每行首尾的换行、空格,跳过空行避免报错 line = line.strip() if not line: continue items = line.split(',') timecap.append(items[0]) qtd.append(int(items[1])) return timecap, qtd # 读取两个文件的数据,替换成你自己的两个txt文件名即可 time_1, qtd_1 = load_data('pkts_by_src.txt') time_2, qtd_2 = load_data('dataset.txt') plt.title("Capture") plt.xlabel('time cap') plt.ylabel('qtd') # 你原来写的plt.yticks(qtd)建议删掉,这行代码会把y轴刻度固定为单文件的所有统计值,两个文件数据范围不同时会显示错乱 # 绘制第一条线(对应第一个文件) plt.plot(time_1, qtd_1, marker='o', c='g', label='pkts_by_src') # 绘制第二条线(对应第二个文件),可以换个颜色和标记方便区分 plt.plot(time_2, qtd_2, marker='s', c='r', label='dataset') # 显示图例,对应上面plot里写的label参数 plt.legend() plt.show()
新手注意点
plt.show()只要在最后调用一次就行,每画一条线就调用的话,会弹出多个窗口,且每个窗口只有一条线- 读取文件时尽量用
with open()的写法,不会出现文件占用、忘记关闭的问题 - 如果两个文件的时间跨度不一致,matplotlib会自动适配x轴、y轴的显示范围,不用手动调整
- 如果数据里存在空行,直接分割转int会报错,所以代码里加了空行跳过的判断,兼容性更好
内容的提问来源于stack exchange,提问作者D-LA
相关产品推荐
相关产品推荐

