如何从给定文本数据生成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预测值和真实值。
正确步骤与代码
- 正确读取数据:使用空白字符作为分隔符(
sep='\s+'),跳过第一行注释,手动指定列名以明确每一列的含义。 - 提取目标列:筛选出T(predict)、T(real)、E(predict)、E(real)四列,并重新命名以便图表展示更清晰。
- 绘制配对图:使用
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
相关产品推荐
相关产品推荐

