2012-12-20 4 views
5

Domanda: è possibile illustrare un'immagine su assi non uniformi?Asse non uniforme di imagesc() in Matlab

Dettagli:

ho bisogno di illustrare un timeseries multidimensionali come immagine. Ma la griglia temporale di questa serie temporale è molto poco uniforme. Ecco un esempio:

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

Il figure, plot(t, values); lo gestisce bene.

Ma imagesc() converte t nel tempo uniforme fra t(1) e t(end) secondo documentazione:

imagesc (x, y, C) mostra C come immagine e specifica i limiti della x- e y- asse con vettori xey.

Pertanto, il comando:

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

illustra l'immagine sulla griglia temporale uniforme.

enter image description here enter image description here

Edit: E 'possibile ri-provare le timeseries con una risoluzione più alta uniforme. Ma i miei tempi sono già molto grandi.

risposta

3

Soluzione

Effettua usando surface per la spaziatura non uniforme.

In primo luogo, creare una superficie xyz 3D della stessa dimensione dei dati di input:

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)); 

Poi, mappa colori i vostri valori. C'è un bel strumento scritto per lo scambio di file MathWorks, real2rgb, che può fare questo per voi:

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

Infine, la trama della superficie. Puoi persino avere fantasia e impostare la trasparenza.

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

enter image description here

+0

grazie, sembra interessante. Controllerò quando sono vicino al PC. – Serg

3

provare uimagesc dallo scambio di file.

enter image description here

+0

Grazie natan. Funziona bene, ma non è applicabile alla mia matrice da 2 GB (tempi).Ad un certo punto ricampiona i dati con una risoluzione più alta. Ad esempio, 10 punti temporali di 't' sono diventati 269 punti. – Serg

+0

Se si dispone di una matrice da 2 GB, non è più logico riprovare a qualcosa di ragionevole (utilizzando imresize o simile)? Uno schermo a 1920x1200x24 bit può mostrare solo circa 10 MB di informazioni, a che serve dare una matrice da 2 GB? – bla

+0

È corretto, ma ho bisogno di vedere la scala temporale attuale quando esegui l'ingrandimento. Supponiamo che la figura mostri 24 ore di dati, e ho bisogno di vedere cosa succede durante 1 secondo specifico. Grazie. – Serg

4

C'è pcolor funzione in MATLAB. Questa funzione fa esattamente quello che stai chiedendo.

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;