0

我在形状中有一个坐标列表及其各自的错误值:

# Graph from standard correlation, page 1
1.197   0.1838  -0.03504    0.07802 +-0.006464  +0.004201
1.290   0.2072  -0.04241    0.05380 +-0.005833  +0.008101

其中列表示x,y,lefterror,righterror,buttomerror,toperror我将文件加载为error=np.genfromtxt("standard correlation.1",skip_header=1),最后我尝试将其绘制为

xerr=error[:,2:4]
yerr=error[:,4:]
x=error[:,0]
y=error[:,1]
plt.errorbar(x,y,xerr=xerr,yerr=yerr,fmt='')

当我尝试运行它时会大喊大叫ValueError: setting an array element with a sequence.,我知道当您将诸如列表之类的对象传递给期望 numpy 数组对象的参数时会出现此错误,我不知道应该如何解决此问题,如 np .genfromtxt 应该总是返回一个 ndarray。

谢谢你的帮助。

编辑:我更改了文件以删除“+”字符,因为读取“+-”会在底部错误列中产生 NaN 值,但我仍然得到相同的错误。

4

2 回答 2

0

numpy 预期单个误差线的数组形状是(2, N). 因此,您需要转置您的数组error[:,2:4].T 此外,matplotlib.errorbar了解与数据相关的这些值。如果x是值和(xmin, xmax)相应的错误,则错误栏从x-xminx+xmax。因此,您不应该在错误栏数组中有负值。

import numpy as np
import matplotlib.pyplot as plt

f = "1   0.1  0.05    0.1 0.005  0.01" + \
   " 1.197   0.1838  -0.03504    0.07802 -0.006464  0.004201 " + \
   " 1.290   0.2072  -0.04241    0.05380 -0.005833  0.008101" 
error=np.fromstring(f, sep=" ").reshape(3,6)
print error
#[[ 1.        0.1       0.05      0.1       0.005     0.01    ]
# [ 1.197     0.1838   -0.03504   0.07802  -0.006464  0.004201]
# [ 1.29      0.2072   -0.04241   0.0538   -0.005833  0.008101]]

xerr=np.abs(error[:,2:4].T)
yerr=np.abs(error[:,4:].T)
x=error[:,0]
y=error[:,1]
plt.errorbar(x,y,xerr=xerr,yerr=yerr,fmt='')
plt.show()

关于值错误,可能是由+-问题引起的。

于 2016-10-11T17:58:27.887 回答
0

感谢 hpaulj,我注意到误差线的形状是 (30,2),但是plt.errobar()预计形状 (2,n) 中的错误数组,因为 python 通常会在类似的操作中转置矩阵并自动避免这个问题,我认为它也会这样做它,但我决定按以下方式更改线路:

xerr=error[:,2:4]
yerr=error[:,4:]

进入

xerr=np.transpose(error[:,2:4])
yerr=np.transpose(error[:,4:])

这使得脚本正常运行,虽然我仍然不明白为什么以前的代码给了我这样的错误,如果有人能帮助我清除它,我会很感激。

于 2016-10-11T17:28:03.093 回答