如何将数据从python脚本发送到Matplotlib?

问题描述:

我对编程颇为陌生,对matplotlib有疑问。我编写了一个python脚本,它从另一个程序的outfile中读入数据,然后从一列中打印出数据。如何将数据从python脚本发送到Matplotlib?

f = open('/home/student/AstroSimulation/out.0001.z0.753.AHF_halos','r') 
for line in f: 
    if line != ' ': 
     line = line.strip() # Strips end of line character 
     columns = line.split() # Splits into coloumn 
     mass = columns[8]  # Column which contains mass values 
     print(mass) 

我现在需要做的是让matplotlib以“质量”和绘图数量与平均质量打印的值。我已经阅读了matplotlib网站上的文档,但他们并没有真正解决如何从脚本获取数据(或者我没有看到它)。如果任何人都可以指出我解释我如何做到这一点的文档,那将是非常感谢。谢谢

+0

@eryksun是的数据是所有在列8列8中的每一行有一个值,我必须做的是取第8列中所有值的平均值(总计第8列的每一行中的值,并将其除以第8列中的总行数),并将其与行数。我很抱歉,如果我没有清楚解释我必须做什么,并再次感谢您的帮助。 – Surfcast23

你会从脚本中调用matplotlib,所以matplotlib不会“从脚本中获取数据”。你把它发送到matplotlib。

您需要保存然而,循环外的群众,但后来,它只是在它的plot()show()函数的调用是最基本的形式:

import matplotlib.pyplot as plt 

masses = [] 

f = open('/home/student/AstroSimulation/out.0001.z0.753.AHF_halos','r') 
f.readline() # Remove header line 
for line in f: 
    if line != ' ': 
     line = line.strip() # Strips end of line character 
     columns = line.split() # Splits into coloumn 
     mass = columns[8]  # Column which contains mass values 
     masses.append(mass) 
     print(mass) 

# If neccessary, process masses in some way 

plt.plot(masses) 
plt.show() 
+0

谢谢,我会试试 – Surfcast23

+0

我正在尝试使用脚本以及eryksun的脚本来做到这一点。 (我认为能够以不止一种方式做到这一点很有意义)我试图用下面的方式去掉列中的第一行,这是一个字符串,但它不适用于上面的脚本。你能解释为什么吗?谢谢 – Surfcast23

+0

eryksun使用不同的方法,并使用显式迭代器。如果要删除此方法的第一行,只需在'for'循环之前调用'f.readline()'。另外,我注意到我的缩进中有一个错误,我现在要修复它... – carlpett

我是你,一直到“绘制平均值的总和“。也许你可以链接到一个像你想要制作的情节的图像。

在当前的脚本,您打印“大众”,要追加到列表的浮点值:

from matplotlib import pyplot 

DATAFILE = '/home/student/AstroSimulation/out.0001.z0.753.AHF_halos' 
MASS_COL = 8 

masses = [] 
with open(DATAFILE) as f: 
    f_it = iter(f)     #get an iterator for f 
    next(f_it)      #skip the first line 
    for n, line in enumerate(f_it): #now the for loop uses f_it 
     row = line.strip().split() 
     if len(row) > MASS_COL: 
      mass = row[MASS_COL] 
      try: 
       mass = float(mass) 
       masses.append(mass) 
       print "%0.3f" % mass 
      except ValueError: 
       print "Error (line %d): %s" % (n, mass) 

#crunch mass data 
plot_data = ... 

#make a plot 
pyplot.plot(plot_data) 
pyplot.show() 
+0

感谢您的建议,我会尝试一下。 – Surfcast23

+0

我有另一个问题。你如何删除列的第一行?我的批量列中的第一行是我需要删除的字符串,因为它会导致错误。 – Surfcast23

+0

再次感谢您的帮助 – Surfcast23