【问题标题】:How can I plot signal statistics(variance) of subintervals in the same graph with signal plot?如何在与信号图相同的图中绘制子区间的信号统计(方差)?
【发布时间】:2021-05-05 18:22:25
【问题描述】:

我计算了信号中子区间的方差。结果是一个向量,我想将其绘制在与下面的信号相同的图表中。如何绘制每个子区间的方差?我应该使用什么类型的情节?直方图还是箱线图?

【问题讨论】:

  • 嗨,你的问题让我很困惑。首先,什么是子区间?但更重要的是,你想做什么?你从一条简单的线开始——在你的平均值周围添加标准表示。为此,只需使用 matplotlib fill between lines。但是你问如何绘制你的标准并提到直方图和箱线图,这对于第一部分完全没有意义。您想要显示均值误差或此类误差的分布。
  • 我有一组 7860 个值,我将它们分成 20 个相等的间隔。 For each I calculated the variance which has this values ([0.06057497068018203, 0.2921903202797406, 0.26130194652200645, 0.6572348814173657, 0.21491131550763803, 0.5220988449198373, 0.032965663897601985, 0.052615615996826896, 0.6022333139843596, 0.17343183929030717]) and I would like to plot it in the same graph with the original signal to show我的信号如何变化。
  • 问题是我在 x 轴上有 7680 个样本用于原始信号,而在 y 轴上是信号值。当我尝试绘制方差时出现此错误:ValueError: x and y must have same first dimension, but have shapes (20,) and (7680,).
  • 嗯,这并不奇怪:D,好吧,我开始明白了。所以让我澄清一下。您想用一些条形图/直方图覆盖这个时间序列,这将显示给定间隔内的方差。即,不是均值的方差,而是区间的方差。
  • 没错!我的信号代表一个人的呼吸频率,我想计算它如何从一个间隔变化到另一个间隔并在图表上表示。

标签: python matplotlib plot


【解决方案1】:

如果您想在给定的间隔内将时间序列与 std 的条形图重叠,您可以通过指定条形的位置简单地将其绘制在同一个图表中。这里是区间的中心,您可以通过多种方式获得,甚至可以手动获得。然后,您可以将条形的宽度设置为您喜欢的任何值,但在我看来,如果它的宽度与间隔大致相同,则看起来不错。下面是matplotlib 中的一个示例。但是,轴可能不对应(即标准的比例可能与信号的比例不匹配)。因此,我建议使用两个轴。

import numpy as np
import matplotlib.pyplot as plt

# create data
n = 100
n_segments = 5
y = np.random.randint(100, size=n)
stds = np.std(y.reshape(n_segments,-1), axis=1)

# get the midpoints
x = np.linspace(n//(2*n_segments),n-n//(2*n_segments),n_segments)

# Sol A
plt.plot(range(n),y)
plt.bar(x, stds, width=n//(n_segments)-1, alpha=0.4)

# Sol B with twin axes
fig, ax1 = plt.subplots()

ax2 = ax1.twinx()
ax1.plot(range(n),y, 'g-')
ax2.bar(x, stds, width=n//(n_segments)-1, alpha=0.4)

【讨论】:

  • 非常感谢,现在可以使用了。你知道应该用什么来绘制趋势线吗?我用 polyfit 计算了趋势,我想在我的图表中绘制类似箭头的东西,以根据使用 polyfit 获得的斜率值建议每个区间的趋势是增加还是减少(如果结果向量中的第一个值是正的,则趋势增加,反之亦然)。
  • 您应该就此提出一个单独的问题。这与这个问题无关,在 cmets 中提出后续问题不是一个好习惯。
  • 我已经在 11 天前的另一篇文章中问过 :)
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 2019-01-18
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
相关资源
最近更新 更多