Matlab中imagesc()的非均匀轴

Matlab中imagesc()的非均匀轴,matlab,image-processing,time-series,Matlab,Image Processing,Time Series,问题:是否可以在非均匀轴上显示图像 详细信息: 我需要以图像的形式演示多维时间序列。但是这个时间序列的时间网格是非常不均匀的。以下是一个例子: m = 10; n = 3; t = sort(rand(m, 1)); % non-uniform time values = randn(m, n); % some random values 图、图(t、值)处理得很好 但是imagesc()根据文档将t转换为t(1)和t(结束)之间的统一时间: imagesc(x,y,C)将C显示为图像,并

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

详细信息:

我需要以图像的形式演示多维时间序列。但是这个时间序列的时间网格是非常不均匀的。以下是一个例子:

m = 10;
n = 3;
t = sort(rand(m, 1));  % non-uniform time
values = randn(m, n);  % some random values
图、图(t、值)处理得很好

但是
imagesc()
根据文档将
t
转换为
t(1)
t(结束)
之间的统一时间:

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

因此,命令:

figure, imagesc(t, 1 : n, values'); colorbar;
在统一时间网格上显示图像


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

解决方案

尝试使用
曲面
以获得不均匀的间距

首先,创建与输入数据大小相同的三维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文件交换中发布了一个很好的工具,可以为您执行以下操作:

cdata = real2rgb(values);  % Where size(cdata) = [m n 3]
最后,绘制曲面。你甚至可以想象并设置透明度

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

从文件交换中尝试


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

谢谢,看起来很有趣。当我靠近电脑时,我会进行检查。但是,使用pcolor或surface方法时,请删除边缘的一列和一行!谢谢你,纳坦。它运行良好,但不适用于我的2GB矩阵(timeseries)。在某些时候,它会以更高的分辨率对数据进行重新采样。例如,
t
的10个时间点变成了269个时间点。如果你有一个2GB的矩阵,那么将其重新采样到合理的值(使用imresize或类似方法)是否更符合逻辑?1920x1200x24位的屏幕只能显示大约10MB的信息,给它一个2GB的矩阵有什么好处?这是正确的,但放大时我需要看到实际的时间刻度。假设,该图显示了24小时内的一些数据,我需要查看在特定的1秒内发生了什么。谢谢。看看matlab central的“jplot”。它根据缩放级别动态地重新采样日期。然而,如果使用pcolor或surface方法,请删除边缘的一列和一行!