2014-04-29 13 views
8

Mam dużą liczbę (~ 1000) plików z rejestratora danych, który próbuję przetworzyć.Wykreślanie wielu linii jako mapy termicznej

Gdybym chciał wykreślić trend z jednego z tych plików dziennika mogę to zrobić za pomocą

plot(timevalues,datavalues) 

Chciałbym móc zobaczyć wszystkie z tych linii w tym samym czasie w podobny sposób jak oscyloskop ma "stały" tryb.

Oscilloscope Diplay

mogę chyba coś sklecić, który używa histogramy ale mam nadzieję, że jest wstępnie istniejące lub bardziej eleganckie rozwiązanie tego problemu.

+0

zasadniczo chcesz mieć 1000 linii na jednym wykresie? – thewaywewalk

+0

Chcę użyć danych z 1000 linii do wytworzenia jednego wykresu, jak na wykresie oscyloskopu, pokazuje wiele aktualizacji w tym samym czasie, za pomocą kolorów, które pokazuje, gdzie więcej z tych form falowych jest "ułożonych" (tj. czerwone części) i gdzie występuje sporadyczna różnica lub błąd w przebiegach (tj. niebieskie części) – Hugoagogo

+1

czy będzie to pomocne? http://www.mathworks.com/help/comm/ref/commscope.eyediagram.html – bla

Odpowiedz

9

Można to zrobić dokładnie to, co sugeruje się, to znaczy wykreślenie mapę cieplną sygnałów.

Weź pod uwagę następujące kwestie: Zbuduję sygnał testowy (z fal sinusoidalnych o różnej amplitudzie), następnie wykreślam mapę cieplną za pomocą hist3 i imagesc.

Chodzi o to, aby zbudować pomocniczy sygnał, który jest tylko zestawieniem wszystkich historii czasu (zarówno w x i y), a następnie wyodrębnić podstawowe statystyki bivariate z tego.

% # Test signals 
xx = 0 : .01 : 2* pi; 
center = 1; 
eps_ = .2; 
amps = linspace(center - eps_ , center + eps_ , 100); 

% # the auxiliary signal will be stored in the following variables 
yy = []; 
xx_f = []; 

for A = amps 
    xx_f = [xx_f,xx]; 
    yy = [yy A*sin(xx)]; 
end 

% # final heat map 
colormap(hot) 
[N,C] = hist3([xx_f' yy'],[100 100]); 
imagesc(C{1},C{2},N') 

enter image description here

Można użyć także jet colormap zamiast hot colormap dla czytelności. W następnej amplitudzie jest gaussian zamiast homogeneus.

enter image description here

+1

Dzięki temu właśnie tego szukałem, na krótko przyjrzałem się hist3, ale nie byłem pewien, jak połączyć te elementy. Przed akceptacją odpowiedzi, istnieje jakakolwiek metoda poza interpolacją, która może być wykorzystana do dodania większej ilości danych do mapy ciepła, gdy nastąpi gwałtowna zmiana sygnału, powodująca zniknięcie linii. – Hugoagogo

+0

@ Hugoagogo, widzę twój problem. Domyślam się, że interpolacja jest fajnym sposobem radzenia sobie z problemem. Niemniej jednak musisz zwiększyć rozdzielczość czasową poprzez interpolację za każdym razem, a nie tylko tam, gdzie masz problem, w przeciwnym razie statystyka dwuwymiarowa ulegnie zniszczeniu. – Acorbe

+0

Znalazłem ten przykład kodu https://www.mathworks.com.au/matlabcentral/answers/63233-interpolating-the-2d-line-to-make-the-new-coordinates-equi-distant, który wydaje się działać dobrze wystarczy dla moich celów.Oznaczanie tej odpowiedzi jako zaakceptowanej – Hugoagogo

7

oto rozwiązanie "prymitywny", który jest po prostu za pomocą hist:

%# generate some fake data 

x=-8:0.01:8; 
y=10*sinc(x); 
yy=bsxfun(@plus,y,0.1*randn(numel(x),1000)'); 
yy(randi(1000,1,200),:)= 5-randi(10)+ circshift(yy(randi(1000,1,200),:),[1 randi(numel(x),1,200)]); 

%# get plot limit parameters 

plot(x,yy) 
yl=get(gca,'Ylim'); 
xl=get(gca,'Xlim'); 
close all; 


%# set 2-d histogram ranges 

ybins=100; 
xbins=numel(x); 
yrange=linspace(yl(1),yl(2),ybins); 
xrange=linspace(xl(1),xl(2),xbins); 

%# prealocate 

m=zeros(numel(yrange),numel(xrange)); 

% build 2d hist 
for n=1:numel(x) 
    ind=hist(yy(:,n),yrange); 
    m(:,n)=m(:,n)+ind(:); 
end 

imagesc(xrange,yrange,m) 
set(gca,'Ydir','normal') 

enter image description here

+1

To podejście, które rozważałem i działa wspaniale, rozwiązanie @Acorbe zapewnia, że ​​jest to ładne, bardziej eleganckie rozwiązanie, więc zaakceptowałem tę odpowiedź. Twoje przykładowe dane są jednak lepsze. – Hugoagogo

1

Dlaczego nie normalizacji danych, a następnie dodać wszystkie linie razem? Następnie można wykreślić mapę cieplną z pojedynczego pliku danych.

Powiązane problemy