2015-02-04 3 views
2

Надеясь получить некоторую помощь, пожалуйста, я пытаюсь данные участок моделирования в отдельных сюжетных с помощью панд и Matplotlib моего кода до сих пор:Участка панда серии в отдельных сюжетных с помощью Matplotlib

import matplotlib.pylab as plt 
import pandas as pd 
fig, ax = plt.subplots(2, 3) 
for i in range(2): 
    for j in range(50, 101, 10): 
     for e in range(3): 
      Var=(700* j)/ 100 
      Names1 = ['ig','M_GZ'] 
      Data1 = pd.read_csv('~/File/JTL_'+str(Var)+'/GZ.csv', names=Names1) 
      ig = Data1['ig'] 
      M_GZ=Data1['M_GZ'] 
      MGZ = Data1[Data1.M_GZ != 0] 
      ax[i, e].plot(MGZ['ig'][:4], MGZ['M_GZ'][:4], '--v', linewidth=1.75) 
plt.tight_layout() 
plt.show() 

Но код дает мне 6 дублированных копий одного и того же участка: enter image description here вместо каждой итерации Var имеет свой собственный сюжет, я попытался изменить цикл и используя различные варианты, как:

fig = plt.figure() 
for i in range(1, 7): 
     ax = fig.add_subplot(2, 3, i) 
      for j in range(50, 101, 10):     
        Var=(700* j)/ 100 
        Names1 = ['ig','M_GZ'] 
        Data1 = pd.read_csv('~/File/JTL_'+str(Var)+'/GZ.csv', names=Names1) 
        ig = Data1['ig'] 
        M_GZ=Data1['M_GZ'] 
        MGZ = Data1[Data1.M_GZ != 0] 
        ax.plot(MGZ['ig'][:4], MGZ['M_GZ'][:4], '--v', linewidth=1.75) 
plt.tight_layout() 
plt.show() 

, но это ничего не меняет. Я все еще получаю тот же сюжет, что и выше. Любая помощь будет оценена, я надеюсь, что каждый сюжетный содержит один набор данных, а не все шесть

Это Link к одному из Dataframes каждого подкаталог ~/File/JTL_'+str(Var)+'/ содержит копию этого файла есть 6 в общей сложности

+0

Можете ли вы показать, что Data1 (кадр данных) выглядит? – derchambers

+0

@ user3645626 Я добавил ссылку на пример того, как будет выглядеть один из кадров данных, будет ли это достаточно или вы считаете, что все 6 будут более полезными? – user3191569

ответ

2

проблема заключается в цикле

for i in range(2): # Iterating rows of the plot 
    for j in range(50, 101, 10): # Iterating your file names 
     for e in range(3): # iterating the columns of the plot 

Конечным результатом является то, что вы перебирать все столбцы для каждого имени файла

для это две работы, у вас должно быть только два уровня вложенности в вашем цикле. Потенциальный код (обновлен):

import matplotlib.pylab as plt 
import pandas as pd 
fig, ax = plt.subplots(2, 3) 
for row in range(2): 
    for col in range(3): 
     f_index = range(50, 101, 10)[row+1 * col] 
     print row, col, f_index 
     Var=(700* f_index)/ 100 
     Names1 = ['ig','M_GZ'] 
     Data1 = pd.read_csv('~/File/JTL_'+str(Var)+'/GZ.csv', names=Names1) 
     ig = Data1['ig'] 
     M_GZ=Data1['M_GZ'] 
     MGZ = Data1[Data1.M_GZ != 0] 
     ax[row, col].plot(MGZ['ig'][:4], MGZ['M_GZ'][:4], '--v',linewidth=1.75) 
plt.tight_layout() 
plt.show() 
+0

Я попробовал ваше предложение, но я продолжаю получать 'IndexError: индекс 3 выходит за рамки для оси 1 с размером 3', однако, когда я меняю строку' fig, ax' to 'fig, ax = plt.subplots (2, 6) 'создается сюжет, где верхняя строка точно такая же, как нижняя строка, когда добавляется' print row, col', я получаю '0,0 0,1 0,2 0,3', вместо этого цикл должен давать' 0,0 0,1 0,2 1,0 1,1 1,2' – user3191569

+0

ха-ха, извините, я читал слишком быстро, по какой-то причине я думал, что было всего 3 файла. Посмотрите обновленный код. – knightofni

+0

какой блестящий ответ спасибо – user3191569

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