Matlab中非均匀的imagesc()轴

Ser*_*erg 5 matlab time-series image-processing

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

细节:

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

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

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;
Run Code Online (Sandbox Code Playgroud)

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

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

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

mc2*_*mc2 6

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;
Run Code Online (Sandbox Code Playgroud)


sup*_*pyo 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));
Run Code Online (Sandbox Code Playgroud)

然后,对您的值进行颜色映射。mathworks 文件交换中发布了一个很好的工具real2rgb,可以为您执行此操作:

cdata = real2rgb(values);  % Where size(cdata) = [m n 3]
Run Code Online (Sandbox Code Playgroud)

最后,绘制曲面。您甚至可以随意设置透明度。

surface(x,y,z,cdata,'EdgeColor','none','FaceColor','texturemap',...
  'CDataMapping','direct');
alpha(0.3)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述