在一个图上对另一个图绘制两个数组

2024-05-14 10:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想比较两个自变量随时间的变化,把它们都标在一个图上。这三个变量都是数组形式的,我是从一个文本文件中提取出来的。 这就是我目前所得到的:

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

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


Tags: infordatareturnplotdefline时间
2条回答

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

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))]。代码运行良好。

编辑:我认为问题可能在于你如何提取数据。当您调用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')

相关问题 更多 >

    热门问题