从二维阵列绘制值

时间:2013-09-24 16:27:53

标签: python matplotlib

我有一个bidimensionnal数组包含我想在Y轴上绘制的值,以及一个bidimensionnal数组,我想在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轴的值(min,max):

    [[-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 个答案:

答案 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')

通常,如果您的数组只有1维,那么您只需执行

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, :, :]加载来自该患者的所有样本的数字。