2016-12-05 20 views
-1

我有一个Python字典,其中包含每个变量的一个元组,其中包含一个时间点数组和一个数组数组(1/0),表示该变量保存的布尔值某个时间点。例如:Python:为真/假信号绘制步进函数

dictionary["a"] = ([0,1,3], [1,1,0]) 

意味着该变量"a"为真在两个时间点0和1,在时刻2 "a"保持一个任意值,在时间点3是假的。

我想生成使用matplotlib.pyplot剧情有看起来在某种程度上是这样的: enter image description here 我已经尝试过类似:

import matplotlib.pyplot as plt 
plt.figure(1) 
graphcount = 1 
for x in dictionary: 
    plt.subplot(len(dictionary), 1, graphcount) 
    plt.step(dictionary[x][0], dictionary[x][1]) 
    plt.xlabel("time") 
    plt.ylabel(x) 
    graphcount += 1 
plt.show() 

,但它并没有给我正确的结果。例如,如果dictionary["a"] = ([2], [1])根本没有显示任何行。有人可以请指出我正确的方向如何做到这一点?谢谢!

+0

你想为每个变量独立的情节,或在同一图中的线所有情节? – Ali

回答

0

根据你的描述,该行应该从第一个点开始,结束于最后一个点。如果第一个和最后一个点是相同的,那么你的线将只有一个点。为了看到只有一个点的线条,您需要使用可见的标记。

关于跳跃的位置,docstring说:

其中:[“预” | 'post'| 'mid']

如果'pre'(默认),从x [i]到x [i + 1]的区间的等级为y [i + 1]。

如果'帖子',该间隔的水平y [i]。

如果'中',y中的跳跃发生在x值之间的中途。

所以我想你想'mid'

dictionary = {} 
dictionary['a'] = ([0,1,3], [1,1,0]) 
dictionary['b'] = ([2], [1]) 

plt.figure(1) 
graphcount = 1 
for x in dictionary: 
    plt.subplot(len(dictionary), 1, graphcount) 
    plt.step(dictionary[x][0], dictionary[x][1], 'o-', where='mid') 
    plt.xlabel("time") 
    plt.ylabel(x) 
    graphcount += 1 
plt.show() 

step_mid

+0

谢谢 - 这已经有所帮助。但是,我希望这条线在整个时间范围内继续。因此,我希望不仅仅有一个变量“b”,而且有一个连续的错误信号。我想我的例子在这种情况下选择不当。另外,对于你的例子中的变量'a',不清楚a点在1点是真是假。这就是为什么我希望步骤总是在整个时间点之间,因此在0.5,1.5,2.5等上。我该怎么做呢? –

+0

目前还不清楚“整个时间框架”是什么意思。你只给了'b'一分,那么节目怎么会猜测时间是什么?请在问题中澄清这一点。查看我的编辑关于步骤的位置。 – Goyo