2012-12-20 125 views
5

问题:是可以举例说明非均匀轴的图像?在Matlab于imagesc()的非均匀轴

详情:

我需要说明的多维时间序列为图像。但是这个时间序列的时间格非常不均匀。这里是一个例子:

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

figure, plot(t, values);处理得好。

但是imagesc()根据文档转换成tt(1)之间t(end)均匀时间:

于imagesc(X,Y,C)显示C作为图像并指定 x和y的范围轴与向量x和y。

因此,命令:

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

示出了在均匀时间网格的图像。

enter image description here enter image description here

编辑:很可能重新采样具有更高的分辨率均匀的时间序列。但是我的时间序列已经很大了。

回答

3

尝试使用surface对于非均匀间隔。

首先,创建具有相同的尺寸的3D XYZ表面作为输入数据:

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

然后,颜色表的值。有一个很好的工具发布到MathWorks的文件交换,real2rgb,可以为你做到这一点:

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

最后,情节的表面。你甚至可以看中并设置透明度。

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

enter image description here

+0

谢谢,这看起来很有趣。我会检查我什么时候在PC附近。 – Serg

3

尝试从文件交换uimagesc

enter image description here

+0

谢谢纳坦。它运行良好,但不适用于我的2GB矩阵(时间序列)。在某个时候,它会以更高的分辨率重新采样数据。例如,“t”的10个时间点变成了269点。 – Serg

+0

如果你有一个2GB的矩阵,将它重新采样为合理的东西(使用imresize或类似的)更合乎逻辑吗?一个1920x1200x24位屏幕只能显示大约10MB的信息,给它一个2GB的矩阵有什么好处? – bla

+0

这是正确的,但我需要在放大时查看实际时间比例。假设,该图显示了24小时的一些数据,并且我需要查看在特定的1秒内发生了什么。谢谢。 – Serg

4

有一个在MATLAB 令pColor功能。这个函数完全符合你的要求。

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;