news 2026/4/18 6:36:54

python读取txt文件并画图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python读取txt文件并画图

你希望用 Python 读取 TXT 文本文件中的数据并绘制可视化图表,我会针对新手最常遇到的 3 种 TXT 数据格式(单行数值、多列分隔数据、带表头表格数据),提供完整可直接运行的代码,同时拆解关键步骤和避坑要点,确保你能快速适配自己的 TXT 文件。

前置准备

首先安装绘图和数据处理的核心库,打开终端 / 命令提示符执行:

bash

pip install matplotlib numpy

场景 1:TXT 文件每行一个数值(如时序数据、单一指标序列)

示例 TXT 内容(保存为data_single.txt

plaintext

15 18 12 22 19 25 17

读取并绘制折线图 + 直方图(直观展示趋势和分布)

python

import matplotlib.pyplot as plt import numpy as np def read_single_value_txt(file_path): """读取每行一个数值的TXT文件,包含异常处理""" try: # 读取文件并转换为浮点数组,自动过滤空行 data = np.loadtxt(file_path, dtype=float) return data except FileNotFoundError: print(f"错误:文件 {file_path} 不存在,请检查路径!") return None except ValueError: print("错误:TXT文件中包含非数值内容(如文字、符号)!") return None # 主逻辑 if __name__ == "__main__": # 替换为你的TXT文件路径(相对路径/绝对路径均可) file_path = "data_single.txt" data = read_single_value_txt(file_path) if data is not None: # 创建1行2列的子图,设置画布大小 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5)) # 子图1:折线图(展示数值趋势) ax1.plot(data, marker='o', color='#2E86AB', linewidth=2, markersize=7) ax1.set_title("数值序列折线图", fontsize=12, fontweight='bold') ax1.set_xlabel("数据序号", fontsize=10) ax1.set_ylabel("数值", fontsize=10) ax1.grid(True, alpha=0.3) # 添加浅色网格,提升可读性 # 子图2:直方图(展示数值分布) ax2.hist(data, bins=5, color='#A23B72', edgecolor='black', alpha=0.7) ax2.set_title("数值分布直方图", fontsize=12, fontweight='bold') ax2.set_xlabel("数值区间", fontsize=10) ax2.set_ylabel("出现频次", fontsize=10) # 自动调整布局,避免标签重叠 plt.tight_layout() # 显示图表 plt.show() # 可选:保存高清图表(取消注释即可) # plt.savefig("single_value_plot.png", dpi=300, bbox_inches='tight')

代码关键说明

  • np.loadtxt():专门处理纯数值 TXT 的高效方法,无需逐行读取;
  • 异常处理:覆盖 “文件不存在”“数据非数值” 两个新手最易踩的坑;
  • marker='o':给折线图添加圆点标记,清晰显示每个数据点;
  • bins=5:直方图的区间数,可根据数据量调整(数据多则增大)。

场景 2:TXT 文件每行多列数据(空格 / 逗号 / 制表符分隔,如 X-Y 坐标)

示例 TXT 内容(保存为data_multi.txt,空格分隔)

plaintext

1 3.5 2 4.2 3 5.1 4 4.8 5 6.3 6 5.9

读取并绘制散点图 + 折线图(展示变量关系)

python

import matplotlib.pyplot as plt import numpy as np def read_multi_column_txt(file_path, delimiter=" "): """ 读取多列分隔的TXT文件 :param file_path: 文件路径 :param delimiter: 分隔符(空格/逗号/,/制表符/\t) """ try: # unpack=True:将多列数据拆分为独立的X、Y数组 x_data, y_data = np.loadtxt(file_path, delimiter=delimiter, unpack=True) return x_data, y_data except Exception as e: print(f"读取失败:{str(e)}") return None, None # 主逻辑 if __name__ == "__main__": file_path = "data_multi.txt" # 若你的TXT是逗号分隔,改为 delimiter=",";制表符分隔改为 delimiter="\t" x, y = read_multi_column_txt(file_path, delimiter=" ") if x is not None and y is not None: plt.figure(figsize=(8, 5)) # 散点图(突出原始数据点) plt.scatter(x, y, color='#F18F01', s=60, label='实测数据', zorder=2) # 折线图(连接数据点,展示趋势) plt.plot(x, y, color='#C73E1D', linestyle='--', linewidth=2, label='趋势线', zorder=1) # 添加标题和标签 plt.title("多列数据散点图+折线图", fontsize=12, fontweight='bold') plt.xlabel("X轴(自变量)", fontsize=10) plt.ylabel("Y轴(因变量)", fontsize=10) plt.legend(loc='upper left') # 显示图例 plt.grid(True, alpha=0.3, zorder=0) plt.show() # 可选:保存图表 # plt.savefig("multi_column_plot.png", dpi=300, bbox_inches='tight')

代码关键说明

  • delimiter:核心参数!必须匹配你的 TXT 实际分隔符(比如 CSV 格式的 TXT 用逗号);
  • unpack=True:将多列数据拆分为独立数组,方便分别作为 X/Y 轴;
  • zorder:控制图层顺序(散点在折线之上),避免数据点被遮挡;
  • s=60:调整散点大小,linestyle='--'设置虚线趋势线,区分原始数据和趋势。

场景 3:带表头的 TXT 数据(类似表格,如月度销售额 / 成本)

示例 TXT 内容(保存为data_header.txt,逗号分隔)

plaintext

月份,销售额(万),成本(万) 1,20,12 2,25,15 3,30,18 4,28,16 5,35,20

读取并绘制柱状对比图(展示多指标对比)

python

import matplotlib.pyplot as plt import numpy as np def read_txt_with_header(file_path, delimiter=","): """读取带表头的TXT文件,手动解析表头和数据""" try: # 打开文件并过滤空行 with open(file_path, 'r', encoding='utf-8') as f: lines = [line.strip() for line in f.readlines() if line.strip()] # 解析表头(第一行) header = lines[0].split(delimiter) # 解析数据行(从第二行开始) months = [] sales = [] cost = [] for line in lines[1:]: parts = line.split(delimiter) months.append(parts[0]) # 月份(字符串) sales.append(float(parts[1])) # 销售额(转数值) cost.append(float(parts[2])) # 成本(转数值) return header, months, sales, cost except Exception as e: print(f"读取失败:{str(e)}") return None, None, None, None # 主逻辑 if __name__ == "__main__": file_path = "data_header.txt" header, months, sales, cost = read_txt_with_header(file_path) if months: # 绘制双列柱状图 x = np.arange(len(months)) # 月份的X轴位置 width = 0.35 # 柱子宽度 fig, ax = plt.subplots(figsize=(10, 6)) # 销售额柱子(左移width/2) ax.bar(x - width/2, sales, width, label='销售额', color='#4CAF50', alpha=0.8) # 成本柱子(右移width/2) ax.bar(x + width/2, cost, width, label='成本', color='#FF9800', alpha=0.8) # 美化配置 ax.set_title("月度销售额&成本对比", fontsize=12, fontweight='bold') ax.set_xlabel("月份", fontsize=10) ax.set_ylabel("金额(万元)", fontsize=10) ax.set_xticks(x) # 设置X轴刻度位置 ax.set_xticklabels(months)# 设置X轴刻度标签(月份) ax.legend() # 显示图例 # 给柱子添加数值标签(更直观) for i, v in enumerate(sales): ax.text(i - width/2, v + 0.5, str(v), ha='center', va='bottom', fontsize=9) for i, v in enumerate(cost): ax.text(i + width/2, v + 0.5, str(v), ha='center', va='bottom', fontsize=9) plt.show() # 可选:保存图表 # plt.savefig("header_plot.png", dpi=300, bbox_inches='tight')

代码关键说明

  • 手动解析表头:np.loadtxt()无法直接跳过表头,因此用open()逐行读取,先处理表头再解析数据;
  • 双列柱状图:通过x ± width/2调整柱子位置,避免重叠;
  • 数值标签:ax.text()给每个柱子添加具体数值,让图表信息更完整;
  • 编码指定:encoding='utf-8'避免中文表头 / 标签出现乱码。

总结

  1. 数据读取核心:纯数值 TXT 用np.loadtxt()快速读取,带表头 TXT 手动逐行解析,关键是匹配正确的delimiter(分隔符);
  2. 作图通用流程:读取数据 → 创建画布 / 子图 → 绘制图表 → 添加标题 / 标签 / 图例 → 显示 / 保存;
  3. 避坑要点:必须添加异常处理(文件不存在、数据类型错误),作图前确保数据是数值类型(避免字符串),中文乱码需指定encoding='utf-8'

你只需替换代码中的file_pathdelimiter(分隔符),就能快速适配自己的 TXT 文件生成图表。如果你的 TXT 格式特殊(比如混合文本和数值),可以告诉我具体格式,我会帮你调整代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 7:22:50

Python读取txt某几列绘图的方法

你希望学会 Python 读取 TXT 文件中指定的某几列数据并绘制可视化图表的方法,核心是精准筛选需要的列(而非全部列)。我会针对「无表头的分隔型 TXT」和「带表头的表格型 TXT」两种最常见场景,提供可直接运行的代码,并重…

作者头像 李华
网站建设 2026/4/17 22:48:12

从零构建专属AutoGLM模型,手把手教你完成Open-AutoGLM二次开发全流程

第一章:从零认识Open-AutoGLM架构与生态Open-AutoGLM 是一个开源的自动化生成语言模型框架,旨在降低大模型应用开发门槛,提升从数据准备到模型部署的全流程效率。该架构融合了自动微分、动态图优化与模块化组件设计,支持多模态输入…

作者头像 李华
网站建设 2026/4/18 5:40:47

Sandboxie性能调优实战:3个场景解决90%卡顿问题

Sandboxie性能调优实战:3个场景解决90%卡顿问题 【免费下载链接】Sandboxie Sandboxie Plus & Classic 项目地址: https://gitcode.com/gh_mirrors/sa/Sandboxie 你是否经历过在Sandboxie中打开浏览器需要等待数十秒的煎熬?或者发现沙箱目录莫…

作者头像 李华
网站建设 2026/4/18 5:41:59

FanFicFare终极指南:3步搞定同人小说电子书制作

FanFicFare终极指南:3步搞定同人小说电子书制作 【免费下载链接】FanFicFare FanFicFare is a tool for making eBooks from stories on fanfiction and other web sites. 项目地址: https://gitcode.com/gh_mirrors/fa/FanFicFare 还在为收藏喜爱的同人小说…

作者头像 李华
网站建设 2026/4/17 12:07:16

vnpy多平台部署实战:Windows、Linux、Mac一站式量化交易环境搭建指南

vnpy多平台部署实战:Windows、Linux、Mac一站式量化交易环境搭建指南 【免费下载链接】vnpy 基于Python的开源量化交易平台开发框架 项目地址: https://gitcode.com/vnpy/vnpy vnpy作为业界领先的Python开源量化交易框架,支持在Windows、Linux和M…

作者头像 李华
网站建设 2026/4/16 18:09:40

Polars终极解决方案:从零基础到高效排查的完整指南

Polars作为由Rust编写的多线程、向量化查询引擎驱动的数据帧技术,已经成为现代数据处理的首选工具。本文将从实战角度出发,为你提供一套完整的故障排查与性能优化方案。 【免费下载链接】polars 由 Rust 编写的多线程、向量化查询引擎驱动的数据帧技术 …

作者头像 李华