Как я могу отправить данные из скрипта Python в Matplotlib?

1

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

  • 0
    @eryksun - да, все данные в столбце 8. Каждая строка столбца 8 имеет значение, и мне нужно лишь взять среднее значение всех значений в столбце восемь (суммировать значения в каждой строке столбца восемь и разделите это на общее количество строк в восьмом столбце) и вычерчивайте график в зависимости от количества строк. Я прошу прощения, если мне неясно, пытаясь объяснить, что я должен делать, и еще раз благодарю вас за вашу помощь.
Теги:
matplotlib
ipython

2 ответа

2

Вы будете вызывать 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
    Спасибо, я попробую
  • 0
    Я пытаюсь сделать это, используя как ваш сценарий, так и сценарий eryksun. (Я думаю, что полезно сделать это более чем одним способом) Я пытаюсь избавиться от первой строки в столбце, которая является строкой, используя способ, который eryksun сделал ниже, но он не работает в приведенном выше сценарии. , Вы можете объяснить, почему? Спасибо
Показать ещё 2 комментария
1

Я был с вами, чтобы "рассчитать сумму в среднем". Возможно, вы могли бы ссылаться на изображение, подобное сюжету, который вы хотите сделать.

В текущем скрипте, где вы печатаете "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()
  • 0
    Спасибо за предложение, я попробую.
  • 0
    У меня был другой вопрос. Как удалить первую строку столбца? Первая строка в моем массовом столбце - это строка, от которой мне нужно избавиться, потому что она вызывает ошибки.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню