来自genfromext的数组作为序列被传递



我有一个坐标列表和它们各自的误差值的形状:

# 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。genfromtext应该总是返回一个数组。

谢谢你的帮助。

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

由于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:])

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

numpy期望的单个错误栏的数组形状是(2, N)。因此,您需要对数组error[:,2:4].T进行转置此外,matplotlib.errorbar也理解这些相对于数据的值。如果x为实际值,(xmin, xmax)为错误值,则错误栏由x-xmin变为x+xmax。因此,在errorbar数组中不应该有负值。

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()

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

相关内容

  • 没有找到相关文章

最新更新