2013-07-11 116 views
0

我想比较两个独立变量随时间变化的方式,通过将这两个变量绘制在一个图上。所有这三个变量都是以数组的形式存在的,我从文本文件中获取。 这是我这么远:在一个图上绘制2个阵列与另一个图

from pylab import * 

data_ = [] 

with open('all_the_data.txt') as dat_: 
    for line in dat_: 
     data_.append([i for i in line.split()]) 

D = zip(*data_) 

def f1(t): 
    y = D[1] 
    return y 

def f2(t): 
    y = D[2] 
    return y 

if __name__ == '__main__': 
    t = D[0] 
    A = f1 
    B = f2 
    plot(t, A, 'bo') 
    hold('on') 
    plot(t, B, 'gX') 
    xlabel('timestamp (unix)') 
    ylabel('Station population') 
    legend('Station 1','Station 2') 
    title('Variance of Stations 1 and 2') 
    show() 
    savefig('2_stations_vs_time.png') 

问题是,它不工作,我不知道为什么。我从绘制两个函数的教程中获得了它。

回答

0

我们绘制数据而不是函数。所以通过AB是错误的。我想你需要做的是:

from pylab import * 

data_ = [] 

with open('all_the_data.txt') as dat_: 
    for line in dat_: 
     data_.append([i for i in line.split()]) 

D = zip(*data_) 

if __name__ == '__main__': 
    t = D[0] 
    A = D[1] 
    B = D[2] 
    plot(t, A, 'bo') 
    hold('on') 
    plot(t, B, 'gX') 
    xlabel('timestamp (unix)') 
    ylabel('Station population') 
    legend('Station 1','Station 2') 
    title('Variance of Stations 1 and 2') 
    show() 
    savefig('2_stations_vs_time.png') 

我已经测试过,如果你的D是一个正确的值,例如D = [list(range(100)), list(range(10, 110)), list(range(20, 120))]。代码运行良好。

+0

干杯,工作一种享受。 – user2546315

1

编辑:我认为问题可能与您如何提取数据。当您拨打A=f1B=f2时,您应该编写A=f1(t)B=f2(t)以符合您构建的方式f1f2。但是,为什么这样呢?

with open('all_the_data.txt', 'r') as dat_: 
    for line in dat_: 
     data_.append([i for i in line.strip().split()]) 

D = zip(*data_) 
t = D[0] 
A = D[1] 
B = D[2] 

对于绘图,我更喜欢面向对象的方法。

import matplotlib.pyplot as plt 
f = plt.figure() 
ax = f.add_subplot(111) 
ax.plot(t, A, 'bo', label="Station 1") 
ax.plot(t, B, 'gX', label="station 2") 
ax.legend() 

ax.set_xlabel('timestamp (unix)') 
ax.set_ylabel('Station population') 
ax.set_title('Variance of Stations 1 and 2') 

f.savefig('2_stations_vs_time.png') 
相关问题