2015-12-05 2 views
0

Я пытался проанализировать данные из файла .dat. Эксперимент в файле повторяется (очень много) раз, так что каждый эксперимент имеет n точек данных для каждого из r экспериментов. В качестве примера: R = 4 экспериментов, при п = 3 точек данных в каждом эксперименте:Анализ и построение из файла данных (.dat) с n наборами значений x и y в python

1  4.8 
    2  3.4 
    3  2.3 

    1  6.5 
    2  5.3 
    3  4.2 

    1  9.8 
    2  8.4 
    3  7.6 

    1  13.8 
    2  12.4 
    3  11.6 

Хочу прочитать файл и участок 4 графиков - первый 3, второй 3 и третья 3 и четвертая 3 строки , Мой код до сих пор это:

for line in myfile: 
     if not line.strip():#takes out empty rows 
      continue 
     else: 
      data.append(line) 

    for line in data: 
     x, y = line.split() 
     timestep.append(float(x)) 
     value.append(float(y)) 

    z = 0.0 
    j = 1 
    n = 3 #no. of data points in one experiment 
    r = 4 #no. of times experiment repeats 
    x = np.arange(1,n) 

    for k in range(1, r): 
     for i in (value): 
      j += 1  
      if n%j != 0: #trying to break the loop after the first experiment of n data points 
       z = i 
       y_"str(j)" = [] #I want to call this array y_j, i.e. y_1 for the first loop or y_2 for the second, etc, wild index in python?! :( 
       y_"str(j)".append(z) 

     else: 
      value = value[steps:] #trying to remove the first three points before starting to for loop again 
     plt.figure() 
     plt.plot(x, y_str(j),'r', label = "y_str(j)") 
     plt.title('y ' +str(j)) 
     plt.show() 

я буду анализировать его больше, но я просто с трудом в выполнении такой же анализ (замышляет, и т.д.) каждые п раз в большом массиве данных. Возможно, даже не обязательно разделять мои входные данные с двумя столбцами на отдельные столбцы x и y, но я получал раздражающие ошибки int и float, используя данные [i] [2] в цикле for.

Большое спасибо за любую помощь!

ответ

0

чтения в данных с помощью эксперимента, используя пустую строку в качестве разделителя:

data = [] 
exp = [[], []] 
for line in myfile: 
    if line.strip(): 
     for index, value in enumerate(line.split()): 
      exp[index].append(float(value)) 
    else: 
     data.append(exp) 
     exp = [[], []] 

и сюжет их все на одном участке:

for number, exp in enumerate(data, 1): 
    plt.plot(*exp, label='experiment {}'.format(number)) 
plt.legend(loc='best') 
plt.title('My Experiments') 

Результат:

enter image description here

0

попробовать сделать что-то вроде этого:

for line in myfile: 
    if line.strip():#takes out empty rows 
     x, y = line.split() 
     timestep.append(float(x)) 
     value.append(float(y)) 

n = 3 #no. of data points in one experiment 
r = 4 #no. of times experiment repeats 
x = np.arange(1, n+1) # you don't need to use it. just plot(y) 
colors = ['r', 'b', 'g', 'k'] 
for k in range(r): 
    y = value[k*n:(k+1)*n] 

    # plt.subplot(r+1, 1, k+1) #if you want place it on different plots 
    plt.plot(x, y, colors[k], label="%d experiment" % (k+1)) 

plt.legend(loc=1) # or wherever you want 
plt.title('Experiments') 
plt.show() 
Смежные вопросы