【问题标题】:Python: Plot step function for true/false signalsPython:为真/假信号绘制阶梯函数
【发布时间】:2016-12-05 09:16:07
【问题描述】:

我有一个 Python 字典,其中每个变量包含一个元组,其中包含一个时间点数组和一个数字数组 (1/0),表示该变量在某个时间点保存的布尔值。例如:

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

表示变量"a"在时间点0和1都为真,在时间点2"a"保持任意值,在时间点3为假。

我想使用matplotlib.pyplot 生成一个图,看起来像这样: 我已经尝试过类似的方法:

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]) 根本不显示任何行。有人可以指出我如何做到这一点的正确方向吗?谢谢!

【问题讨论】:

  • 您想为每个变量单独绘制一个图,还是在同一图的线上绘制所有图?

标签: python matplotlib plot


【解决方案1】:

根据您的描述,该行应该从第一个点开始,到最后一个点结束。如果第一个点和最后一个点相同,那么您的线将仅由一个点组成。要查看只有一个点的线,您需要使用可见标记。

关于跳跃的位置,docstring 说:

其中:['pre'| '发布' | ‘中’]

如果是‘pre’(默认),则从 x[i] 到 x[i+1] 的区间的级别为 y[i+1]。

如果是“post”,则该区间的级别为 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()

【讨论】:

  • 谢谢 - 这已经有帮助了。但是,我希望这条线在整个时间范围内继续。因此,我不仅希望变量b 有一个点,而且还有一个连续的错误信号。我想我的例子没有很好地用于这种情况。此外,对于变量a,在您的示例中,不清楚 a 在第 1 点是真还是假。这就是为什么我希望这些步骤总是在整个时间点之间,因此在 0.5、1.5、2.5 等上。我该怎么做?
  • 不清楚您所说的“整个时间范围”是什么意思。你只给b 打了一分,那么程序怎么能猜到时间范围呢?请在问题中澄清这一点。查看我对步骤位置的修改。
猜你喜欢
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
相关资源
最近更新 更多