2013-07-11 60 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') 
相關問題