如何在for循环中从文件中读取x和y时绘制多行?

时间:2014-09-06 17:32:16

标签: python matplotlib plot

我有一个for循环,其中每个输入文件我从文件中读取x和y并将它们保存在我想要的单独列表中,然后绘制图形。现在我想在一个图中绘制所有文件的所有x-y。问题是我在for循环中从我的文件中读取x和y所以我必须绘制它们然后转到下一个文件,否则我将失去x和y而我不想要将它们保存在另一个文件中,然后将它们一起绘制有什么建议吗?我很感激任何建议,因为这是我第一次使用matplotlib而我是python的新手。

for f in os.listdir(Source):
x=[]
y=[]
file_name= f
print 'Processing file : ' + str (file_name)
pkl_file = open( os.path.join(Source,f) , 'rb' )
List=pickle.load(pkl_file)
pkl_file.close()
x = [dt.datetime.strptime(i[0],'%Y-%m-%d')for i in List ]
y = [i[1] for i in List]
maxRange=max(y)

if not maxRange >= 5 :
    print 'The word #' +str(file_name[0]) + ' has a frequency of ' +str(maxRange) + '.'
else :
    fig = plt.figure()
    plt.ylim(0,maxRange)
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
    plt.gca().xaxis.set_major_locator(mdates.YearLocator())
    plt.plot(x, y , 'm')
    plt.xlabel('Time')
    plt.ylabel('Frequency')
    fig.savefig("Plots/"+ file_name[0] + '.pdf' )

1 个答案:

答案 0 :(得分:2)

你去吧。尽管不是全部,但是可以提供更多的建议。

fig = plt.figure()
maxRange = 0
for file_name in os.listdir(source):
    print 'Processing file : ' + str(file_name)
    with open(os.path.join(source,file_name), 'rb') as pkl_file:
        lst = pickle.load(pkl_file)
    x,y = zip(*[(dt.datetime.strptime(x_i,'%Y-%m-%d'), y_i) for (x_i, y_i) in lst])
    if max(y) < 5 :
        print 'The word #' +str(file_name[0]) + ' has a frequency of ' +str(maxRange) + '.'
    else :
        maxRange=max(maxRange, max(y))
        plt.plot(x, y , 'm')
plt.ylim(0,maxRange)
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
plt.gca().xaxis.set_major_locator(mdates.YearLocator())
plt.xlabel('Time')
plt.ylabel('Frequency')
fig.savefig("Plots/allfiles.pdf")