绘制两个不同长度的数组

9
我有两个数组。一个是长度为(1000,)的原始信号,另一个是长度为(100,)的平滑信号。我想要直观地展示平滑信号如何代表原始信号。由于这些数组的长度不同,我无法将它们叠加在一起绘制。在matplotlib中是否有一种方法可以实现这一点?
谢谢!

你不能绘制两个长度不同的数组。也许你可以使用两个不同的 x-轴 分别绘制它们。 - Srivatsan
定义两个变量的“x”值。 - wwii
1
你需要为两个信号定义不同的 x 向量。例如,x1=np.linspace(0, 1, len(signal1))x2= np.linspace(0, 1, len(signal2)),然后将它们绘制为 plt.plot(x1, signal1)plt.plot(x2, signal2) - rth
2个回答

15

rth建议的那样,进行定义。

x1 = np.linspace(0, 1, 1000)
x2 = np.linspace(0, 1, 100)

然后绘制原始数据与x1的图形,以及平滑后的数据与x2的图形:

plt.plot(x1, raw)
plt.plot(x2, smooth)

np.linspace(0, 1, N) 返回一个长度为 N 的数组,其中包含从 0 到 1(包括 0 和 1)之间等间距的数值。

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(2015)

raw = (np.random.random(1000) - 0.5).cumsum()
smooth = raw.reshape(-1,10).mean(axis=1)

x1 = np.linspace(0, 1, 1000)
x2 = np.linspace(0, 1, 100)
plt.plot(x1, raw)
plt.plot(x2, smooth)
plt.show()
产生的结果为 enter image description here

如果较大的数组大小不能被较小的数组大小整除,则此方法无法正常工作。 - hafiz031

1
你需要两个不同的x轴来完成这项工作。你不能在一个图中绘制两个长度不同的变量。
import matplotlib.pyplot as plt
import numpy as np

y = np.random.random(100) # the smooth signal
x = np.linspace(0,100,100) # it's x-axis

y1 = np.random.random(1000) # the raw signal
x1 = np.linspace(0,100,1000) # it's x-axis

fig = plt.figure()
ax = fig.add_subplot(121)
ax.plot(x,y,label='smooth-signal')
ax.legend(loc='best')

ax2 = fig.add_subplot(122)
ax2.plot(x1,y1,label='raw-signal')
ax2.legend(loc='best')

plt.suptitle('Smooth-vs-raw signal')
fig.show()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接