【问题标题】:Matlab imagesc for data unevenly spaced in yMatlab imagesc 用于 y 中不均匀间隔的数据
【发布时间】:2017-01-05 06:14:52
【问题描述】:

是否可以在imagesc 中指定 x 轴一个列向量,以便将刻度和数据点(像素)放置在相应的点上?据我从手册中了解到,您只需指定图像的角,只要您的数据像100:100:1000 一样均匀分布,这不是问题。

在我的例子中,x 轴由 21 个元素组成,它们像 1200:50:1700 一样均匀分布,而 y 轴是两个均匀分布的列向量 200:50:450500:25:725 的垂直连接。我的目标是将数据点(像素)放在正确的位置,但似乎不可能这样做。有解决办法吗?

【问题讨论】:

  • 最好的办法是创建数据的稀疏矩阵表示,并用imagesc 显示那个
  • @Suever 或者我突然想到我可以使用pcolor 而不需要大量修改?

标签: matlab matlab-figure


【解决方案1】:

一种选择是使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

结果:

【讨论】:

  • 感谢您的回答,我需要重现此内容以了解其工作原理。
  • @Vesnog 现在,我的答案更笼统(Y 中有超过 2 个不同的空格)。稍后我会添加更多解释。
【解决方案2】:

尝试将imagesc 替换为surf 命令:

surf(1200:50:1700, [200:50:450 500:25:725], rand(16,11), 'EdgeColor','none');
view([0 90]);

注意:与imagesc相比,通过这种方式,您会丢失最后一列和最后一行,但您可以在显示之前复制这些数据。

【讨论】:

  • 是的,surf 的行为类似于pcolor 我想,我猜对了吗?在这种情况下,最后一列和最后一行也丢失了。
【解决方案3】:

使用 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]);

(注意图像数据和真实数据之间的所有上下翻转)

【讨论】:

  • pcolor 没问题,但是正如其他答案中指出的那样,我丢失了最后一行和最后一列。
猜你喜欢
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
  • 2021-10-19
  • 1970-01-01
相关资源
最近更新 更多