我正在尝试处理来自数据记录器的大量(~1000)文件。
如果我想用这些日志文件中的一个来绘制趋势,我可以使用
来完成plot(timevalues,datavalues)
我希望能够以类似于示波器具有“持久性”的方式同时查看所有这些线路。模式。
我可以拼凑一些使用直方图的东西,但我希望这个问题有预先存在或更优雅的解决方案。
答案 0 :(得分:9)
您可以完全按照自己的建议行事,即绘制信号的热图。
考虑以下因素:我将构建一个测试信号(由不同幅度的正弦波组成),然后我将通过hist3
和imagesc
绘制热图。
这个想法是建立一个辅助信号,它只是所有时间历史的并置(在x
和y
中),然后提取基本的双变量统计数据。
% # 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')
为了便于阅读,您还可以使用jet
色彩映射而不是hot
色彩映射。
在下文中,幅度是高斯而不是同质。
答案 1 :(得分: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')
答案 2 :(得分:1)
为什么不规范数据然后将所有行添加到一起?然后,您可以从单个数据文件中绘制热图。