Matlab图像c表示y中不均匀间隔的数据

时间:2017-01-03 15:56:33

标签: matlab matlab-figure

是否可以在imagesc中为x轴指定一个列向量,使得刻度和数据点(像素)放在相应的点上?据我从手册中了解,您只需指定图像的角落,只要您的数据均匀间隔(如100:100:1000),这就不是问题。

在我的例子中,x轴由21个元素组成,它们均匀地间隔为1200:50:1700,而y轴是两个均匀间隔的列向量200:50:450和{{1}的垂直连接}。我的目标是将数据点(像素)放在正确的位置,但似乎不可能这样做。有解决方法吗?

3 个答案:

答案 0 :(得分:2)

尝试使用surf命令替换surf(1200:50:1700, [200:50:450 500:25:725], rand(16,11), 'EdgeColor','none'); view([0 90]);

imagesc

注意:通过这种方式,您将最后一列和最后一行与array#filter进行比较,但您可以在显示之前复制这些数据。

答案 1 :(得分:2)

一种选择是使Y也均匀分布,而不是使用repelem

X = 1200:50:1700;
Y = [0 50 100 200:50:450 500:25:725 800];
% set the spacing factor:
spacing = round(diff(Y)/min(diff(Y)));

间距向量看起来像:

spacing =
  Columns 1 through 14
     2     2     4     2     2     2     2     2     2     1     1     1     1     1
  Columns 15 through 19
     1     1     1     1     3

并将元素之间的距离定义为向量中元素之间最小距离的乘法 然后,我们定义了新的' Y'对于图像,它将均匀分布,矢量中元素之间的空间最小。

% Define the new Y:
Y_spaced = Y(1):min(diff(Y)):Y(end); % = 0:25:800
% some arbitrary data:
data = rand(numel(Y),numel(X));

我们使用间距向量作为repelem的输入,以根据需要复制data中的每一行:

% spacing the data:
data_spaced = repelem(data,spacing([1 1:end]),1,1);

我们可以使用imagesc(矩阵ij方向或笛卡尔xy方向)绘制它:

imagesc(X,Y_spaced,data_spaced)
axis xy

结果:

spaced image

答案 2 :(得分:1)

使用contourf或将数据插值到适合所有数据点的网格,例如: interp2或使用contourf

绘图

初始化数据

X=[1200:50:1700]
Y=[200:50:450 500:25:725]

V = peaks(max(size(X,2),size(Y,2)))(1:size(Y,2),1:size(X,2));

使用contourf

进行绘图
contourf(X,Y,V);
view([0 -90]);

插值和绘图

Xq=linspace(min(X),max(X),100);
Yq=linspace(min(Y),max(Y),100)';
Vq = interp2(X,Y,V,Xq,Yq,'nearest');
imagesc(Vq)

如果你想让你的像素准确地位于正确的位置,你需要使用一个网格,当然你的Y矢量的所有点上都有点,所以你需要相应地调整“100”。屏幕和数据分辨率。

另一种方法是使用pcolor

pcolor(X,Y,V)
view([0 -90]);

(小心图像数据和实际数据之间的所有上下翻转)