2014-04-29 41 views
8

我有大量(〜1000)來自我正在嘗試處理的數據記錄器的文件。將很多行繪製爲熱圖

如果我想使用

plot(timevalues,datavalues) 

我希望能夠查看所有這些線路在同一時間以同樣的方式繪製從這些日誌文件,我可以做一個單一的一個趨勢以及示波器如何具有「持續」模式。

Oscilloscope Diplay

我也許可以湊齊的東西,使用直方圖,但我希望有預先存在的或更優雅的解決這個問題。

+0

你基本上想要在一個陰謀中有1000行? – thewaywewalk

+0

我想使用1000行的數據產生一個繪圖,就像在示波器圖中一樣,它同時顯示許多更新,通過使用顏色顯示更多這些波形「堆疊」的顏色(即紅色部分)以及波形中偶爾出現差異或毛刺的地方(即藍色部分) – Hugoagogo

+1

這會對您有所幫助嗎? http://www.mathworks.com/help/comm/ref/commscope.eyediagram.html – bla

回答

9

您可以完全按照自己的建議進行操作,即繪製信號的熱圖。考慮以下幾點:我將建立一個測試信號(不同振幅的正弦波),然後我將通過hist3imagesc繪製熱圖。

這個想法是建立一個輔助信號,它只是所有時間歷程的並列(都在xy),然後從中提取基本雙變量統計量。

% # 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

您還可以使用jet顏色表,而不是hot顏色表的可讀性。 在下面的幅度是高斯而不是同質。

enter image description here

+1

感謝這正是我正在尋找的東西,我曾經簡單地看過hist3,但並不確定如何將這些作品放在一起。 在我接受答案之前,除了插值之外,還有什麼方法可用於在信號快速變化時將更多數據添加到熱圖中,從而導致線消失。 – Hugoagogo

+0

@Hugoagogo,我看到你的問題。我想插值是處理這個問題的一個很好的方法。儘管如此,您必須每次都通過插值增加時間分辨率,而不僅僅是在問題出現的地方,否則雙變量統計數據將被破壞。 – Acorbe

+0

我發現這個代碼示例https://www.mathworks.com.au/matlabcentral/answers/63233-interpolating-the-2d-line-to-make-the-new-coordinates-equi-distant,似乎工作正常足以達到我的目的。將此答案標記爲接受 – Hugoagogo

7

這裏有一個 「原始」 的解決方案,只是使用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

這是我正在考慮的方法,並且效果很好,@Acorbe提供的解決方案是我認爲更好的更優雅的解決方案,因此我接受了該答案。您的示例數據雖然更好。 – Hugoagogo

1

你爲什麼不規範化的數據,然後添加所有的線條一起?然後可以從單個數據文件繪製熱圖。