2017-10-28 27 views
0

좋은 방법으로 다음 코드를 단순화하기위한 아이디어? 반복되는 코드는 수천 개가 될 것입니다. 예 : 시험 101.csv ... 시험 2233.csv 나는이 도움이 될 생각루프로 범례와 파이썬 줄거리를 단순화

import pandas as pd 
import matplotlib 
import matplotlib.pyplot as plt 
import numpy as np 


data = pd.read_csv('reports/test-101.csv', header=None) 
line1, = plt.plot(data[2], data[1], label='line 101') 
line1m, = plt.plot(np.array([0, 12]), np.array([np.mean(data[1]), 
np.mean(data[1])]), label='line-101 mean') 

data = pd.read_csv('reports/test-102.csv', header=None) 
line2, = plt.plot(data[2], data[1], label='line 102') 
line2m, = plt.plot(np.array([0, 12]), np.array([np.mean(data[1]), 
np.mean(data[1])]), label='line-102 mean') 

data = pd.read_csv('reports/test-103.csv', header=None) 
line3, = plt.plot(data[2], data[1], label='line 103') 
line3m, = plt.plot(np.array([0, 12]), np.array([np.mean(data[1]), 
np.mean(data[1])]), label='line-103 mean') 
. 
. 
. 


plt.legend(handles=[line1, line2, line3, 
         line1m, line2m, line3m]) 

답변

1

import os 

import numpy as np 
import pandas as pd 

from matplotlib import pyplot as plt 

csv_dir = 'reports/' 
csv_files = [csv for csv in os.listdir(csv_dir)] 

plt_handles = [] 
index = 0 

for csv_file in csv_files: 
    # You can parse the csv_file to get the index handle if you wish 
    data = pd.read_csv(csv_dir + csv_file, header=None) 
    line, = plt.plot(data[2], data[1], label='line %d' % index) 
    line_m, = plt.plot(np.array([0, 12]), np.array([np.mean(data[1]), 
     np.mean(data[1])]), label='line-%d mean' % index) 

    plt_handles.append((line, line_m)) 
    index += 1 # for demonstration purposes - if you do not parse csv fname 

lines, lines_m = zip(*plt_handles) # transpose matrix - lines before means 

plt.legend(handles=lines + lines_m) 
+0

방법뿐만 아니라 루프 레이블에? –

+0

답변을 개선하고 레이블을 잊어 버렸습니다 – CermakM

+0

고마워요! 이 줄을 단순화하는 방법이 있습니까 ('line_m, = ...')? –