2017-10-28 163 views
0

任何想法都可以將下面的代碼簡化爲循環,重複代碼將達到數千。例如測試101.csv ...測試2233.csv用圖例化簡循環python plot into循環

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,= ...')? –