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

Python读取大文本数据绘制指定图表出错,求排查与修正

Python图表绘制错误排查与修正方案

问题描述

我想用Python重现一张特定样式的图表,数据集为包含time1、power1、time2、power2四列的制表符分隔文本文件(约5000行),但目前生成的图表与预期样式不符,原代码如下:

# Import
import numpy as np
import pandas as pd
import csv
import matplotlib.pyplot as plt


# Load data from csv file
Filename = "powercurveHTC10000_2.txt"

with open(Filename) as inp:
 Dataoverview = list(zip(*(line.strip().split('\t') for line in inp)))
 print(list(zip(*(line.strip().split('\t') for line in inp))) )

 #Data1 = Dataoverview[1]

 Time1 = Dataoverview[0][0:5000]
 Power1 = Dataoverview[1][0:5000]
 Time2 = Dataoverview[3][0:5000]
 Power2 = Dataoverview[4][0:5000]

 print('probeer', Dataoverview[3][0:2])

 # Plot
 plt.plot(Time1, Power1, 'ro')
 # plt.plot(Time2, Power2, 'b*')
 plt.title('Power usage measured by thermocouples')
 plt.ylim(0,100)
 plt.xlim(3000,4250)
 plt.gca().set_xticks([2])
 plt.gca().set_yticks([2])
 plt.xlabel('Cycles [s]')
 plt.ylabel('Power [W]')
 plt.show()

错误点排查

  • 文件读取指针耗尽:打开文件后,第一次list(zip(*(line.strip().split('\t') for line in inp)))已将文件指针移到末尾,后续print(list(zip(...)))会输出空列表,还可能导致数据读取不完整
  • 列索引错误:数据集只有4列,索引应为0-3,但代码中取了Dataoverview[4],会触发索引越界异常
  • 数据类型未转换:读取到的是字符串类型,直接传入plt.plot会导致绘图逻辑异常,无法正确渲染数值关系
  • 坐标轴刻度设置错误:set_xticks([2])和set_yticks([2])将刻度强制设为仅显示2,和设置的xlim(3000,4250)、ylim(0,100)完全不匹配,导致坐标轴显示混乱
  • 冗余数据切片:原文件约5000行,[0:5000]切片无意义,直接取整列即可

修正后的代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 加载数据:用pandas读取制表符分隔文件更简洁,自动处理数据类型
filename = "powercurveHTC10000_2.txt"
df = pd.read_csv(filename, sep='\t', header=None, names=['time1', 'power1', 'time2', 'power2'])

# 提取所需数据(pandas自动转为数值类型)
time1 = df['time1']
power1 = df['power1']
time2 = df['time2']
power2 = df['power2']

# 绘图
plt.figure(figsize=(10,6))  # 可选:设置图表尺寸
plt.plot(time1, power1, 'ro', markersize=2, label='Power 1')  # 调整标记大小避免重叠
plt.plot(time2, power2, 'b*', markersize=2, label='Power 2')  # 启用第二组数据绘图
plt.title('Power usage measured by thermocouples')
plt.ylim(0, 100)
plt.xlim(3000, 4250)
# 设置与坐标轴范围匹配的合理刻度
plt.gca().set_xticks(np.arange(3000, 4251, 250))
plt.gca().set_yticks(np.arange(0, 101, 20))
plt.xlabel('Cycles [s]')
plt.ylabel('Power [W]')
plt.legend()  # 显示图例区分两组数据
plt.grid(True, alpha=0.3)  # 可选:添加网格线提升可读性
plt.show()

修正说明

  1. 改用pandas.read_csv读取数据,自动处理制表符分隔、数据类型转换,避免手动读取的各类错误
  2. 修正列索引逻辑,直接通过列名提取数据,更直观且不易出错
  3. 调整坐标轴刻度为与xlim、ylim匹配的合理数值,保证坐标轴显示正常
  4. 启用第二组数据的绘图,并添加图例、网格线优化图表可读性
  5. 缩小标记大小,避免数据点过于密集重叠

内容的提问来源于stack exchange,提问作者JetskiS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:07:49