5

问题:是否可以在非均匀轴上说明图像?

细节:

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

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

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

但根据文档imagesc()转换为统一t时间:t(1)t(end)

imagesc(x,y,C) 将 C 显示为图像,并使用向量 x 和 y 指定 x 轴和 y 轴的边界。

因此,命令:

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

说明了统一时间网格上的图像。

在此处输入图像描述 在此处输入图像描述

编辑:可以以更高的统一分辨率重新采样时间序列。但是我的时间序列已经很大了。

4

3 回答 3

5

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;
于 2013-12-11T13:10:58.527 回答
4

从文件交换中尝试uimagesc 。

在此处输入图像描述

于 2012-12-21T02:40:26.547 回答
2

解决方案

尝试使用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)

在此处输入图像描述

于 2012-12-20T23:46:17.707 回答