【发布时间】:2021-11-23 18:09:04
【问题描述】:
假设我有一个数据流,为简单起见,将其设为贝尔曲线,从大范围获取:
import numpy as np
import matplotlib.pyplot as plt
def pdf(x, mean, std):
"""Return a PDF."""
y_out = 1/(std * np.sqrt(2 * np.pi)) * np.exp(-(x - mean)**2 / (2 * std**2))
return y_out
x = np.linspace(-1000, 1000, 20000)
y = 100 * pdf(x, 0, 1) + np.random.normal(0, 1, 20000)
fig, ax = plt.subplots()
ax.plot(x, y)
由于 x 范围太大,绘图将只显示一条非常窄的线,而且我们不需要在绘图中包含所有噪声。
在这种情况下,通过仅显示范围 [-20, 20] 来绘制它可能是有意义的,例如:ax.set_xlim([-20, 20])。
但是,假设现在我们从另一次收购中得到了类似的东西:
y = 100 * pdf(x, -50, 1) + 100 * pdf(x, 0, 1) + 100 * pdf(x, 40, 1) + np.random.normal(0, 1, 20000)
有了这样一个函数,我们可能想要绘制更大的范围,例如ax.set_xlim([-70, 60]),将采集到的所有信号可视化。
有没有办法根据实际信号(即任何高于某个阈值,比如 10)以编程方式调整限制,而不必先绘制整个范围,然后手动调整?
【问题讨论】:
-
您是否提前知道信号中峰值的位置,或者您是在问我们如何进行信号分析?
标签: python matplotlib plot