You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 10:33:17