2013-09-24 66 views
0

我有一個雙向數組,包含我想繪製在Y軸上的值和一個雙向數組,我想在X軸上繪製日期時間值,我想從這些數組中獲取兩行數值。 但是,這些結構並不像預期的那樣工作,因爲我得到了不同於曲線圖的圖形。來自雙維數組的陰謀值

價值爲x軸(日期):

[[datetime.datetime(2011, 1, 1, 0, 0, 25, 135000), datetime.datetime(2011, 2, 1, 0, 0, 57, 386000), 
datetime.datetime(2011, 3, 1, 0, 0, 59, 579000), datetime.datetime(2011, 4, 1, 0, 0, 27, 676000), 
datetime.datetime(2011, 5, 1, 0, 0, 25, 135000), datetime.datetime(2011, 6, 1, 0, 0, 26, 414000), 
datetime.datetime(2011, 7, 1, 0, 0, 28, 145000), datetime.datetime(2011, 8, 1, 0, 0, 26, 432000), 
datetime.datetime(2011, 9, 1, 0, 0, 27, 301000), datetime.datetime(2011, 10, 1, 0, 0, 27, 643000), 
datetime.datetime(2011, 11, 1, 0, 0, 27, 673000), datetime.datetime(2011, 12, 1, 0, 0, 28, 294000)], 
[datetime.datetime(2011, 1, 1, 0, 0, 25, 135000), datetime.datetime(2011, 2, 1, 0, 0, 57, 386000), 
datetime.datetime(2011, 3, 1, 0, 0, 59, 579000), datetime.datetime(2011, 4, 1, 0, 0, 27, 676000), 
datetime.datetime(2011, 5, 1, 0, 0, 25, 135000), datetime.datetime(2011, 6, 1, 0, 0, 26, 414000), 
datetime.datetime(2011, 7, 1, 0, 0, 28, 145000), datetime.datetime(2011, 8, 1, 0, 0, 26, 432000), 
datetime.datetime(2011, 9, 1, 0, 0, 27, 301000), datetime.datetime(2011, 10, 1, 0, 0, 27, 643000), 
datetime.datetime(2011, 11, 1, 0, 0, 27, 673000), datetime.datetime(2011, 12, 1, 0, 0, 28, 294000)]] 

值y軸(最小值,最大值):

[[-8.0, 19.0, 11.0, 6.0, 6.0, 6.0, 6.0, 6.0, 2.0, 2.0, 2.0, 2.0], 
[-12.0, -7.0, -6.0, -6.0, -6.0, -6.0, -6.0, -6.0, -6.0, -6.0, -7.0, -7.0]] 

我想就如何將這些結構使一些幫助顯示兩行最小和最大過期日期。

回答

1

如果你有兩個「二維」陣列,叫xy,其具有相同的長度,然後嘗試

import numpy as np 
import matplotlib.pyplot as plt 

# populate x and y arrays. 

x = np.array(x) 
y = np.array(y) 

fig = plt.figure() 
ax = fig.add_subplot(111) 

ax.plot(x[:,0], y[:,0], 'g-o') 
ax.plot(x[:,1], y[:,1], 'r-x') 

在一般情況下,如果你的數組只有一個維,你可以簡單地做

ax.plot(x, y) 

如果你的陣列具有兩套以上的價值觀,你可以做

for i in range(x.shape[-1]): 
    ax.plot(x[:,i], y[:,0]) 

符號x[:,n]有兩部分; :意味着從每一行獲取數據,而,n意味着從每一行獲取n+1(0表示第一個)元素。這工作,因爲你的數據結構類似於

[[date00, date01], 
[date10, date11], 
[date20, date21], 
... 
[dateN0, dateN1]] 

所以x[:,0]取第一列和x[:,1]發生的第二列。

如果您有很多維度的大數組,您可以索引每個數組,如x[dim0, dim1, ..., dimN]。例如,假設您有三維醫療數據陣列,其中尺寸代表patientID,sampleID,viral_load,則可以通過執行data[0, :, -1]或所有來自所有患者的病毒載量數字,從第一位患者的所有樣本中獲取最後一個病毒載量數通過執行data[0, :, :]從該患者採集樣品。

+0

好的謝謝。有沒有更通用的方法來做到這一點,以便它可以適用於維數高於2或甚至維1的數組?我嘗試了一個循環,但它只是在圖上繪製了一條垂直的直線。 – jerome

+0

檢查編輯。我試圖回答你的問題。 – wflynny