2012-12-20 179 views
5

問題:是可以舉例說明非均勻軸的圖像?在Matlab於imagesc()的非均勻軸

詳情:

我需要說明的多維時間序列爲圖像。但是這個時間序列的時間格非常不均勻。這裏是一個例子:

m = 10; 
n = 3; 
t = sort(rand(m, 1)); % non-uniform time 
values = randn(m, n); % some random values 

figure, plot(t, values);處理得好。

但是imagesc()根據文檔轉換成tt(1)之間t(end)均勻時間:

於imagesc(X,Y,C)顯示C作爲圖像並指定 x和y的範圍軸與向量x和y。

因此,命令:

figure, imagesc(t, 1 : n, values'); colorbar; 

示出了在均勻時間網格的圖像。

enter image description here enter image description here

編輯:很可能重新採樣具有更高的分辨率均勻的時間序列。但是我的時間序列已經很大了。

回答

3

嘗試使用surface對於非均勻間隔。

首先,創建具有相同的尺寸的3D XYZ表面作爲輸入數據:

m = 10; 
n = 3; 
t = sort(rand(m, 1)); % non-uniform time 
values = randn(m, n); % some random values 
x = repmat(t,1,n); 
y = repmat(1:n,m,1); 
z = zeros(size(y)); 

然後,顏色表的值。有一個很好的工具發佈到MathWorks的文件交換,real2rgb,可以爲你做到這一點:

cdata = real2rgb(values); % Where size(cdata) = [m n 3] 

最後,情節的表面。你甚至可以看中並設置透明度。

surface(x,y,z,cdata,'EdgeColor','none','FaceColor','texturemap',... 
    'CDataMapping','direct'); 
alpha(0.3) 

enter image description here

+0

謝謝,這看起來很有趣。我會檢查我什麼時候在PC附近。 – Serg

3

嘗試從文件交換uimagesc

enter image description here

+0

謝謝納坦。它運行良好,但不適用於我的2GB矩陣(時間序列)。在某個時候,它會以更高的分辨率重新採樣數據。例如,「t」的10個時間點變成了269點。 – Serg

+0

如果你有一個2GB的矩陣,將它重新採樣爲合理的東西(使用imresize或類似的)更合乎邏輯嗎?一個1920x1200x24位屏幕只能顯示大約10MB的信息,給它一個2GB的矩陣有什麼好處? – bla

+0

這是正確的,但我需要在放大時查看實際時間比例。假設,該圖顯示了24小時的一些數據,並且我需要查看在特定的1秒內發生了什麼。謝謝。 – Serg

4

有一個在MATLAB 令pColor功能。這個函數完全符合你的要求。

m = 10; 
n = 3; 
t = sort(rand(m, 1)); % non-uniform time 
values = randn(m, n); % some random values 
figure 
plot(t, values); 
figure 
pcolor(t, 1 : n, values'); 
colorbar;