我已经获得了一个名为“density_air.dat”的数据文件,我需要从每列中获取数据并将它们放入自己的列表中(即tList将保存以“-10”开头的列中的值和密度将在“1.341”开头的列中保存值。然后需要绘制列表。我无法用这些数据填充列表...任何帮助?
from scitools.std import *
import sys
import pylab as pl
inFile = sys.argv[-1]
f = open(inFile, 'r')
for x in range(4):
f.readline()
tList = []
density = []
for line in f:
words = line.split()
for x in words:
tList.append(words[x])
density.append(words[x])
f.close()
plot(tList, density)
数据文件是:
# Density of air at different temperatures, at 1 atm pressure
# Column 1: temperature in Celsius degrees
# Column 2: density in kg/m^3
-10 1.341
-5 1.316
0 1.293
5 1.269
10 1.247
15 1.225
20 1.204
25 1.184
30 1.164
# Source: Wikipedia (keyword Density)
答案 0 :(得分:1)
有一个名为numpy
的{{1}}函数将ascii文件加载到loadtxt
数组中:
numpy
答案 1 :(得分:0)
尝试将循环更改为:
for line in f:
words = line.split()
tList.append(int(words[0]))
density.append(float(words[1]))
因为代码可以使用数字索引快速进行模糊处理,所以可以使用元组解包将值分配给有意义的变量名,例如:
for line in f:
temp,dens = line.split()
tList.append(int(temp))
density.append(float(dens))
答案 2 :(得分:0)
你使用pylab绘图,为什么不用于阅读?
import sys
import pylab as pl
inFile = sys.argv[-1]
temperature, density = pl.genfromtxt(inFile, unpack=True)
pl.plot(temperature, densitiy, 'rx')
pl.show()
unpack=True
是必需的,因为您的数据是按列排列的。
'rx'
绘制红色十字架,因为您不想连接点。
函数genfromtxt
是加载了pylab的numpy
的一部分。
我建议不要使用pylab,而是自己加载相应的模块,在这种情况下matplotlib.pyplot
和numpy
:
import sys
import matplotlib.pyplot as plt
import numpy as np
inFile = sys.argv[-1]
temperature, density = np.genfromtxt(inFile, unpack=True)
plt.plot(temperature, densitiy, 'rx')
plt.show()
如果您有多个导入
,请不要使用from ... import *