无法绘制从数据文件中每行元素计算的数据

时间:2017-07-25 18:24:09

标签: python

我有一个数据文件,每行包含4个元素keVkeVerrorCountsCountserror,每个元素用空格分隔。对于每一行,我想使用这4个元素计算赫兹​​(Hz)和磁通密度(Fnu)并绘制它们。因此,在读取任何行的四个元素后,我想从keV(简单乘法)计算Hz,然后使用此Hz值通过乘以同一行的计数值来计算Fnu。我还想把输出写在一个文件中。我的代码能够计算Hz,因为写入的输出txt文件与我手动计算的值匹配,但生成的图表显示不同的值。

文件的前几行:

   keV        keV error    counts       Counts error
0.616850019 7.29998946E-3 6.82969764E-2 5.15005877E-3
0.631449997 7.30001926E-3 7.20156059E-2 5.33540128E-3
0.646049976 7.29998946E-3 8.04692879E-2 5.47288591E-3
0.65882504 5.47501445E-3 0.102332868 7.17073539E-3

我没有经验的代码编写尝试是这样的:

import numpy as np
import matplotlib.pyplot as plt

(kev,keverr,cts,ctserr)=np.loadtxt("sedtotal.dat", usecols=(0,1,2,3),unpack=True)

hz=kev*2.415e17
hzerr=keverr*2.415e17

fnu=kev*cts*1.602e-9
fnuerr=kev*ctserr*1.602e-9

nufnu=hz*fnu
nufnuerr=hz*fnuerr

plt.figure(1)
plt.ylabel(r'log $\nu$F$\nu$ (Jy-Hz)',fontsize = 12)
plt.xlabel(r'log $\nu$ (Hz)',fontsize =12)

print(hz,fnu) 
plt.errorbar(hz,hzerr,fnu,fnuerr, fmt='ro', color="red", elinewidth=None, capsize=3,barsabove=True)

plt.yscale('log')
plt.xscale('log')

f = open('sedtotal.txt', 'w')
print >> f, 'Filename:', hz, fnu, fnuerr  # to write the output in a file
f.close()

ax = plt.gca()
plt.show()

0 个答案:

没有答案