Я новичок в программировании и задаюсь вопросом о matplotlib. Я написал скрипт python, который считывает данные из outfile другой программы, затем распечатывает данные из одного столбца.
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, но они действительно не рассматривают, как получить данные из сценария (или я просто не видел его). Если кто-нибудь может указать мне на какую-то документацию, объясняющую, как я это делаю, это будет действительно оценено. спасибо
Вы будете вызывать 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()
Я был с вами, чтобы "рассчитать сумму в среднем". Возможно, вы могли бы ссылаться на изображение, подобное сюжету, который вы хотите сделать.
В текущем скрипте, где вы печатаете "mass", вы хотите добавить в список значение с плавающей запятой:
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()