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

如何从给定文本数据生成T、E预测与真实值的配对图

问题:绘制T/E预测值与真实值的配对图

我有如下格式的文本数据,希望绘制配对图以比较**T(predict)-T(real)和E(predict)-E(real)**两组数据:

# T(predi) E(predict)       # T(real) E(real) 
1 T= 601. E= -.72462983E+03 1 T= 601. E= -.72462497E+03
2 T= 602. E= -.72464801E+03 2 T= 602. E= -.72464965E+03
3 T= 608. E= -.72465664E+03 3 T= 607. E= -.72465453E+03
4 T= 619. E= -.72466672E+03 4 T= 614. E= -.72465770E+03
5 T= 632. E= -.72467811E+03 5 T= 622. E= -.72466228E+03
6 T= 646. E= -.72468973E+03 6 T= 629. E= -.72466767E+03
7 T= 657. E= -.72470168E+03 7 T= 637. E= -.72467402E+03
8 T= 663. E= -.72471276E+03 8 T= 644. E= -.72468087E+03
9 T= 661. E= -.72472269E+03 9 T= 648. E= -.72468913E+03
10 T= 652. E= -.72473076E+03 10 T= 648. E= -.72469576E+03
11 T= 639. E= -.72461744E+03 11 T= 645. E= -.72470063E+03
12 T= 622. E= -.72461563E+03 12 T= 638. E= -.72470469E+03
13 T= 604. E= -.72461422E+03 13 T= 627. E= -.72470813E+03
14 T= 586. E= -.72461309E+03 14 T= 614. E= -.72471141E+03
15 T= 570. E= -.72461174E+03 15 T= 600. E= -.72471497E+03
16 T= 556. E= -.72460997E+03 16 T= 587. E= -.72471740E+03
17 T= 547. E= -.72460840E+03 17 T= 574. E= -.72471902E+03
18 T= 544. E= -.72460811E+03 18 T= 565. E= -.72472163E+03
19 T= 547. E= -.72460976E+03 19 T= 560. E= -.72472417E+03
20 T= 554. E= -.72458790E+03 20 T= 561. E= -.72472707E+03

我尝试用以下代码绘制,但无法正常运行,不知道如何选择对应列(第3、8列和第5、10列)来生成目标配对图:

import pandas as pd
import numpy as np
import sys
df = pd.read_csv("data.txt", sep='delimiter', 
                 header=None, engine='python')
print(df)
pd.plotting.scatter_matrix(df, alpha=0.2)

预期生成的图表为包含四个核心子图的配对矩阵:T(predict)与T(real)的散点图、T(predict)与E(predict)的散点图、E(real)与T(real)的散点图、E(real)与E(predict)的散点图,对角线为各变量的直方图。


解决方案

问题根源

之前的代码使用sep='delimiter'会把整行内容作为单一列读取,无法拆分出独立的数值列,导致无法提取需要的T/E预测值和真实值。

正确步骤与代码

  1. 正确读取数据:使用空白字符作为分隔符(sep='\s+'),跳过第一行注释,手动指定列名以明确每一列的含义。
  2. 提取目标列:筛选出T(predict)、T(real)、E(predict)、E(real)四列,并重新命名以便图表展示更清晰。
  3. 绘制配对图:使用pd.plotting.scatter_matrix绘制配对矩阵图。

完整代码:

import pandas as pd
import matplotlib.pyplot as plt

# 定义列名,对应数据的每一列
cols = ['idx_pred', 'T_pred_label', 'T_pred', 'E_pred_label', 'E_pred', 
        'idx_real', 'T_real_label', 'T_real', 'E_real_label', 'E_real']

# 读取数据:跳过第一行注释,用空白分割列
df = pd.read_csv("data.txt", sep='\s+', skiprows=1, names=cols)

# 提取需要的四列,并重命名为易读的名称
plot_data = df[['T_pred', 'T_real', 'E_pred', 'E_real']]
plot_data.columns = ['T(predict)', 'T(real)', 'E(predict)', 'E(real)']

# 绘制配对图,调整画布大小,显示图表
pd.plotting.scatter_matrix(plot_data, alpha=0.2, figsize=(8, 8))
plt.show()

代码说明

  • sep='\s+':匹配任意数量的空白字符(空格、制表符等),正确拆分每一列数据。
  • skiprows=1:跳过第一行的注释行,避免表头识别错误。
  • 重命名列名后,生成的配对图会自动使用新名称作为坐标轴标签,更直观展示数据对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:30:12