2015-06-23 68 views
3

我有兩個數組。一個是長度爲(1000,)的原始信號,另一個是長度爲(100,)的平滑信號。我想直觀地表示平滑信號如何表示原始信號。由於這些陣列的長度不同,我無法將它們疊加在一起。有沒有辦法在matplotlib中這樣做?繪製兩個不同長度的數組

謝謝!

+0

你不能繪製兩個不同長度的陣列。也許你可以使用兩個不同的'x-axes'分別繪製它們 – ThePredator

+0

定義兩者的_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

回答

7

作爲rth suggested,定義

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(包括的)。


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

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

相關問題