在一个图表上绘制2个阵列与另一个阵列

时间:2013-07-11 16:19:19

标签: python matplotlib plot graphing

我想比较两个自变量如何随时间变化,通过在一个图上绘制它们。所有三个变量都是数组的形式,我从文本文件中提取。 这是我到目前为止所得到的:

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

问题是,它不起作用,我不知道为什么。我从一个关于绘制两个函数的教程中得到了它。

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分: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))]。代码效果很好。