2016-09-06 2 views
2

У меня есть списки из ~ 10 соответствующих входных файлов, содержащих столбцы разделенных вкладкой данных, приблизительно 300 строк/точек на каждый.Python - Графическое содержимое mutliple-файлов

Я ищу для построения содержимого каждого набора данных, так что у меня есть 2 графика для каждого набора данных, каждый из которых просто равен x vs (y1, y2, y3, ...), а другой - преобразуется функцией, например x vs (f (y1), f (y2), f (y3), ...).

Я не уверен, что лучший способ достичь этого, я думал об использовании простого массива имен файлов, то не мог понять, как хранить их все без перезаписи данных - что-то вроде этого:

import numpy as np 
import matplotlib.pyplot as plt 

def ReadDataFile(file): 
    print (file) 
    x,y = np.loadtxt(file, unpack=True, usecols=(8,9)) 
    return x, y 

inputFiles = ['data1.txt','data2.txt','data2.txt',...] 
for file in inputFiles: 
    x1,y1 = ReadDataFile(file) ## ? ## 
    p1,q1 = function(x1,y1) ## ? ## 

plt.figure(1) 
plt.plot(x1,y1) 
plt.plot(x2,y2) 
... 
# plt.savefig(...) 

plt.figure(2) 
plt.plot(p1,q1) 
plt.plot(p2,q2) 
... 
# plt.savefig(...) 
plt.show() 

Я думаю, мой вопрос в том, как лучше всего читать и хранить все данные и поддерживать возможность доступа к нему без необходимости вставлять весь код в readloop. Могу ли я прочитать два набора данных в список пар? Это что-то в Python? если да, то как мне получить к ним доступ?

Заранее благодарим за любую помощь! С уважением!

+0

Как насчет чтения каждого файла данных и помещения их в словарь? Это сработает для вас? – gabra

+0

Вы можете сохранить свои данные в массиве и использовать 'np.hstack()' для объединения данных (один столбец для x и один для каждого y) и построить объединенные массивы в виде подзаголовков внутри одного объекта-объекта. Я считаю, что «GridSpec» очень хорош для этого. – Andrew

+0

@gabra Должен сказать, что я не испытываю словарей вообще ... но я понимаю, что они хранят пары ключ-значение, я думаю, что это похоже на C++-карту? могут ли записи «значение» в карте быть списком? ie: key1 = 'x1', value1 = [... x1 values ​​list ...] с ключом2 = 'y2' и value2 '= [... y1 values ​​list ...] Это кажется немного неуклюжим мне! Я решил, что должно быть более элегантное решение? – Pete

ответ

0

В принципе, я думаю, вы должны поместить весь свой код в readloop, потому что это сработает легко. Существует несколько иной способ использования matplotlib, который упрощает использование существующей организации ваших данных и записывает более короткий код. Вот это игрушка, но полный, пример:

import matplotlib.pyplot as plt 
from numpy.random import random 

fig, axs = plt.subplots(2) 

for c in 'abc':     # In your case, for filename in [file-list]: 
    x, y = random((2, 5)) 
    axs[0].plot(x, y, label=c)  # filename instead of c in your case 
    axs[1].plot(x, y**2, label=c) # Plot p(x,y), q(x,y) in your case 

axs[0].legend() # handy to get this from the data list 

fig.savefig('two_plots.png') 

enter image description here

Вы также можете создать две фигуры и сюжет в каждой из них в явном виде, если вы нуждаетесь в них в разных файлах для разметки страниц и т.д.:

import matplotlib.pyplot as plt 
from numpy.random import random 

fig1, ax1 = plt.subplots(1) 
fig2, ax2 = plt.subplots(1) 

for c in 'abc':     # or, for filename in [file-list]: 
    x, y = random((2, 5)) 
    ax1.plot(x, y, label=c) 
    ax2.plot(x, y**2, label=c) 

ax1.legend() 
ax2.legend() 

fig1.savefig('two_plots_1.png') 
fig2.savefig('two_plots_2.png') 
+0

Большое спасибо! Работал шармом. – Pete

Смежные вопросы