2012-12-20 15 views
5

Pytanie: czy można zilustrować obraz na niejednorodnej osi?Niejednolita oś imagesc() w Matlab

Szczegóły:

muszę zilustrowania wielowymiarowego timeseries jako obraz. Ale siatka czasowa tego przedziału czasowego jest bardzo niejednolita. Oto przykład:

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

The figure, plot(t, values); obsługuje go dobrze.

jednak imagesc() przekształca t do jednolitego czasu pomiędzy t(1) i t(end) według dokumentacji:

imagesc (X, Y, C, C) wykazuje jako obraz i określa Granice x i y oś z wektorami x i y.

Dlatego komenda:

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

ilustruje obraz na jednolitej siatki czasu.

enter image description here enter image description here

Edit: Istnieje możliwość ponownej próby w timeseries z wyższym jednolity rozmiar. Ale mój asortyment jest już bardzo duży.

Odpowiedz

3

Rozwiązanie

Użyj surface do nierównomiernych odstępach.

Najpierw utwórz 3D xyz powierzchnię tej samej wielkości jako danych wejściowych:

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

Następnie colormap swoje wartości. Jest miły napisali narzędzie do wymiany plików MATHWORKS, real2rgb, że można zrobić to dla ciebie:

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

Wreszcie, działka powierzchnia. Możesz nawet mieć ochotę i ustawić przezroczystość.

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

enter image description here

+0

dziękuję, wygląda interesująco. Sprawdzę, kiedy jestem w pobliżu komputera. – Serg

3

spróbować uimagesc z wymiany plików.

enter image description here

+0

Dzięki Natan. Działa dobrze, ale nie dotyczy mojej matrycy 2GB (timeseries).W pewnym momencie ponownie przesyła dane o wyższej rozdzielczości. Na przykład 10 punktów czasowych "t" zmieniło się w 269 punktów. – Serg

+0

Jeśli masz matrycę 2 GB, czy nie jest bardziej logiczne, aby ponownie przetworzyć ją na coś rozsądnego (używając imresize lub podobnego)? Ekran o rozdzielczości 1920x1200x24 może wyświetlać tylko około 10 MB informacji, co jest dobre, aby nadać mu matrycę 2 GB? – bla

+0

To prawda, ale potrzebuję zobaczyć rzeczywistą skalę czasu podczas powiększania. Załóżmy, że rysunek ilustruje 24 godziny niektórych danych i muszę zobaczyć, co dzieje się w ciągu określonej sekundy. Dzięki. – Serg

4

Jest pcolor funkcji w programie MATLAB. Ta funkcja wykonuje dokładnie to, o co prosisz.

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;