news 2026/4/16 8:29:08

Python 读取 TXT 文本并绘制可视化图表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 读取 TXT 文本并绘制可视化图表

你想要用 Python 读取 TXT 文本文件中的数据,并基于这些数据绘制可视化图表,我会针对常见的 TXT 数据格式(单行数值、多列分隔数据、带表头数据)提供可直接运行的示例代码,帮你快速实现需求。

前置准备

首先安装绘图所需的核心库(matplotlib用于作图,numpy辅助数据处理):

pip install matplotlib numpy

场景 1:TXT 文件每行一个数值(简单数值序列)

示例 TXT 内容(data1.txt)

plaintext

12 15 8 20 18 10 16

读取并绘制折线图 / 直方图

python

import matplotlib.pyplot as plt import numpy as np # 1. 读取TXT数据 def read_single_column_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 # 2. 作图 if __name__ == "__main__": file_path = "data1.txt" # 替换为你的TXT文件路径 data = read_single_column_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='blue', linewidth=2, markersize=6) ax1.set_title("数值序列折线图", fontsize=12) ax1.set_xlabel("序号", fontsize=10) ax1.set_ylabel("数值", fontsize=10) ax1.grid(True, alpha=0.3) # 添加网格 # 子图2:直方图(展示数值分布) ax2.hist(data, bins=5, color='orange', edgecolor='black', alpha=0.7) ax2.set_title("数值分布直方图", fontsize=12) ax2.set_xlabel("数值区间", fontsize=10) ax2.set_ylabel("频次", fontsize=10) # 调整布局并显示 plt.tight_layout() plt.show() # 可选:保存图片 # plt.savefig("single_column_plot.png", dpi=300, bbox_inches='tight')

代码关键说明

  • np.loadtxt():快速读取纯数值的 TXT 文件,自动忽略空行(如需处理空行,可先手动过滤);
  • plt.subplots():创建多子图布局,适合对比展示不同图表;
  • marker='o':给折线图添加数据点标记,提升可读性;
  • plt.tight_layout():自动调整子图间距,避免标签重叠。

场景 2:TXT 文件每行多列数据(空格 / 逗号分隔)

示例 TXT 内容(data2.txt,空格分隔的 x/y 坐标)

plaintext

1 5.2 2 6.8 3 7.5 4 6.1 5 8.3 6 9.0 7 7.8

读取并绘制散点图 / 折线图

python

import matplotlib.pyplot as plt import numpy as np # 1. 读取多列分隔数据 def read_multi_column_txt(file_path, delimiter=" "): """ 读取多列分隔的TXT文件 :param file_path: 文件路径 :param delimiter: 分隔符(空格/逗号等) """ try: # delimiter指定分隔符,unpack=True将列数据解包为独立数组 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 # 2. 作图 if __name__ == "__main__": file_path = "data2.txt" x, y = read_multi_column_txt(file_path, delimiter=" ") # 若为逗号分隔,改为delimiter="," if x is not None and y is not None: # 创建散点图+折线图叠加 plt.figure(figsize=(8, 5)) # 散点图(突出数据点) plt.scatter(x, y, color='red', s=50, label='数据点') # 折线图(连接数据点) plt.plot(x, y, color='green', linestyle='--', label='趋势线') # 添加标题和标签 plt.title("多列数据散点图+折线图", fontsize=12) plt.xlabel("X轴", fontsize=10) plt.ylabel("Y轴", fontsize=10) plt.legend() # 显示图例 plt.grid(True, alpha=0.3) plt.show()

代码关键说明

  • delimiter参数:根据 TXT 实际分隔符调整(空格 / 逗号 / 制表符\t等);
  • unpack=True:将多列数据拆分为独立的数组(如 x 和 y),方便作图;
  • scatter():绘制散点图,s参数控制点的大小;
  • linestyle='--':设置折线为虚线样式。

场景 3:带表头的 TXT 数据(类似 CSV 格式)

示例 TXT 内容(data3.txt,逗号分隔)

plaintext

产品,销量,利润 A,50,1200 B,35,800 C,70,1800 D,45,950

读取并绘制柱状图

python

import matplotlib.pyplot as plt import numpy as np # 1. 读取带表头的TXT数据 def read_txt_with_header(file_path, delimiter=","): """读取带表头的TXT文件,跳过首行表头""" try: # 先读取所有行 with open(file_path, 'r', encoding='utf-8') as f: lines = f.readlines() # 跳过表头行,处理数据行 header = lines[0].strip().split(delimiter) # 获取表头 data_lines = lines[1:] # 解析数据 categories = [] # 产品名称 sales = [] # 销量 profit = [] # 利润 for line in data_lines: line = line.strip() if line: # 跳过空行 parts = line.split(delimiter) categories.append(parts[0]) sales.append(float(parts[1])) profit.append(float(parts[2])) return header, categories, sales, profit except Exception as e: print(f"读取失败:{str(e)}") return None, None, None, None # 2. 作图 if __name__ == "__main__": file_path = "data3.txt" header, categories, sales, profit = read_txt_with_header(file_path) if categories: # 绘制双列柱状图(对比销量和利润) x = np.arange(len(categories)) # 产品分类的x轴位置 width = 0.35 # 柱子宽度 fig, ax = plt.subplots(figsize=(10, 6)) # 销量柱子 ax.bar(x - width/2, sales, width, label='销量', color='skyblue') # 利润柱子(缩放为千单位,方便展示) ax.bar(x + width/2, np.array(profit)/1000, width, label='利润(千)', color='salmon') # 设置标签和标题 ax.set_title("产品销量&利润对比", fontsize=12) ax.set_xlabel("产品", fontsize=10) ax.set_ylabel("数值", fontsize=10) ax.set_xticks(x) ax.set_xticklabels(categories) ax.legend() # 给柱子添加数值标签 for i, v in enumerate(sales): ax.text(i - width/2, v + 1, str(v), ha='center', va='bottom') for i, v in enumerate(np.array(profit)/1000): ax.text(i + width/2, v + 0.05, f"{v:.1f}", ha='center', va='bottom') plt.show()

代码关键说明

  • 手动读取 + 解析:带表头的 TXT 不适合直接用np.loadtxt(),需跳过首行后逐行解析;
  • 双列柱状图:通过x ± width/2调整柱子位置,避免重叠;
  • 数值标签:ax.text()给每个柱子添加数值,提升图表可读性;
  • 数据缩放:将利润除以 1000,使销量和利润的数值量级匹配,图表更美观。

总结

  1. 数据读取核心:纯数值 TXT 用np.loadtxt()快速读取,带表头 / 复杂格式 TXT 手动逐行解析,关键是匹配正确的分隔符;
  2. 作图基础流程:读取数据 → 创建画布 / 子图 → 绘制图表(折线 / 柱状 / 散点等) → 添加标题 / 标签 / 图例 → 显示 / 保存;
  3. 避坑要点:处理 TXT 时需捕获文件不存在、数据类型错误等异常,作图前确保数据格式为数值类型(避免字符串)。

根据你的 TXT 实际格式(分隔符、是否有表头、数据类型),调整上述示例中的delimiter、读取逻辑即可适配。

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

自动化3D建模效率提升方案:腾讯混元3D-Part商业技术分析报告

自动化3D建模效率提升方案:腾讯混元3D-Part商业技术分析报告 【免费下载链接】Hunyuan3D-Part 腾讯混元3D-Part 项目地址: https://ai.gitcode.com/tencent_hunyuan/Hunyuan3D-Part 执行摘要 在当前的3D内容生产生态中,传统建模工作流面临着显著…

作者头像 李华
网站建设 2026/4/15 4:37:32

终极OpenWrt路由器改造方案:从基础刷机到高级配置完全指南

还在为路由器功能单一、性能瓶颈而烦恼吗?OpenWrt作为开源路由器操作系统的领先者,能够彻底改变你的网络体验。本文将带你从零开始,掌握OpenWrt刷机的完整流程,让你的路由器脱胎换骨,拥有无限扩展可能! 【免…

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

重庆DEM数据终极指南:如何快速获取高精度高程数据

重庆DEM数据终极指南:如何快速获取高精度高程数据 【免费下载链接】重庆地区DEM数据集 探索重庆的地理奥秘,这份DEM数据集为你提供了详尽的高程、等高线与路网信息。无论是专业GIS分析还是三维可视化,tif、kmz和kml格式的多样选择都能满足你的…

作者头像 李华
网站建设 2026/4/16 11:08:36

Dockge终极指南:轻松实现Docker Compose一键管理

Dockge终极指南:轻松实现Docker Compose一键管理 【免费下载链接】dockge A fancy, easy-to-use and reactive self-hosted docker compose.yaml stack-oriented manager 项目地址: https://gitcode.com/GitHub_Trending/do/dockge Dockge是一款现代化的Dock…

作者头像 李华
网站建设 2026/4/13 19:09:15

3步快速掌握InstantID与Blender融合:零训练3D人脸建模终极教程

3步快速掌握InstantID与Blender融合:零训练3D人脸建模终极教程 【免费下载链接】InstantID 项目地址: https://gitcode.com/gh_mirrors/in/InstantID 还在为3D人脸建模的复杂流程而头疼吗?今天我要分享一个革命性的解决方案:将Instan…

作者头像 李华
网站建设 2026/4/16 11:03:28

计算机毕业设计|基于springboot + vue外卖点餐系统(源码+数据库+文档)

外卖点餐 目录 基于springboot vue外卖点餐系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue外卖点餐系统 一、前言 博主介绍&am…

作者头像 李华