使用Python / matplotlib循环绘制多个csv文件

时间:2015-07-30 18:21:13

标签: python loops csv matplotlib

我有一个目录,里面有多个.csv文件,每个文件只有两列(日期和整数)。 我试图让这段代码遍历每个文件并单独绘制它们,以便每个.csv 都有一个相应的.png。每次运行时,我都会得到正确数量的.png文件,但每个文件都有完全相同的数据。我已经使用plt.clf()方法来为每个循环清除它,但它不起作用。这是代码:

import numpy as np
import pylab as pl
import matplotlib.pyplot as plt
import datetime as DT
import matplotlib.dates as mdates
import scipy
import os
import glob

rootdir='/path/to/file'

for infile in glob.glob( os.rootdir.join(rootdir, '*.csv.out') ):
    output = infile + '.out'

data= np.loadtxt(infile, delimiter=',',
         dtype={'names': ('date', 'session'),'formats': ('S10', 'i4')} )

#Organizes 2-column spreadsheet
dates, sessions = map(list, zip(*data))
print dates, sessions

x = [DT.datetime.strptime(date,"%m-%d-%y") for date in dates]
y = [sessions]

fig = plt.figure()
ax = fig.add_subplot(111)
ax.xaxis_date()
ax.grid()
#Fills space under plotted line
ax.fill_between(x, sessions, color='blue')

# slants the x axis
fig.autofmt_xdate()
plt.plot(x,sessions)
plt.xlabel('Date')
plt.ylabel('Sessions')
plt.title('Peak Usage')

fileNameTemplate = r'\path\to\file\Plot{}.png'

for subdir,dirs,files in os.walk(rootdir):
    for count, file in enumerate(files):
        pl.savefig(fileNameTemplate.format(count), format='png')
        pl.clf() 

我在this answer的解决方案之后对枚举器进行了建模,但我仍然遇到问题。

1 个答案:

答案 0 :(得分:1)

你需要:

  • 为您的地块定义一个功能
  • 从你的循环中调用该函数
  • 在所述函数的末尾包含plt.close()。

现在,当你走过目录时,你不是在创建新的情节。 plot命令需要在循环内部。

def plot():
   #do your plotting in here. If this is being called from a loop and the 
   #variables used herein are defined before, it will use the 
   #global values as they exist at the time. You can also end this function with
  fig.savefig(**args)
  plt.close()



for count, file in enumerate(files):
    plot()