Matlab imagesc用于y轴上间隔不均匀的数据

Matlab imagesc用于y轴上间隔不均匀的数据,matlab,matlab-figure,Matlab,Matlab Figure,在imagesc中是否可以指定x轴a列向量,以便将记号和数据点像素放置在相应的点上?据我从手册中了解,您只指定图像的角点,只要您的数据以100:100:1000等间距分布,这就不是问题 在我的例子中,x轴由21个元素组成,这些元素均匀分布,如1200:50:1700,而y轴是两个均匀分布的列向量200:50:450和500:25:725的垂直连接。我的目标是使数据点像素位于正确的位置,但这似乎不可能做到。是否有解决方法?使用轮廓线或使用interp2或轮廓线绘图等工具将数据插值到适合所有数据点的

在imagesc中是否可以指定x轴a列向量,以便将记号和数据点像素放置在相应的点上?据我从手册中了解,您只指定图像的角点,只要您的数据以100:100:1000等间距分布,这就不是问题


在我的例子中,x轴由21个元素组成,这些元素均匀分布,如1200:50:1700,而y轴是两个均匀分布的列向量200:50:450和500:25:725的垂直连接。我的目标是使数据点像素位于正确的位置,但这似乎不可能做到。是否有解决方法?

使用轮廓线或使用interp2或轮廓线绘图等工具将数据插值到适合所有数据点的网格中

contourf(X,Y,V);
view([0 -90]);
初始化数据

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(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]);

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

使用轮廓线,或使用interp2或使用轮廓线绘制将数据插值到适合所有数据点的网格

contourf(X,Y,V);
view([0 -90]);
初始化数据

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(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]);
小心图像数据和真实数据之间的所有上下翻转

尝试使用surf命令替换imagesc:

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

尝试使用surf命令替换imagesc:

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

一个选项是使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));
我们使用间距向量作为输入,以便根据需要复制数据中的每一行:

% spacing the data:
data_spaced = repelem(data,spacing([1 1:end]),1,1);
我们可以使用imagesc在矩阵ij方向或笛卡尔xy方向上绘制它:

imagesc(X,Y_spaced,data_spaced)
axis xy
结果是:

一个选项是使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));
我们使用间距向量作为输入,以便根据需要复制数据中的每一行:

% spacing the data:
data_spaced = repelem(data,spacing([1 1:end]),1,1);
我们可以使用imagesc在矩阵ij方向或笛卡尔xy方向上绘制它:

imagesc(X,Y_spaced,data_spaced)
axis xy
结果是:


最好的方法是创建数据的稀疏矩阵表示,并使用imagesc@Suever或者我突然想到,我可以使用pcolor而无需进行大量的修补?您最好的选择是创建数据的稀疏矩阵表示,并使用imagesc@Suever或者我突然想到我可以用没有大量修补的pcolor?是的,我想冲浪的行为与pcolor相似,对吗?在这种情况下,最后一列和最后一行也丢失了。是的,我想surf的行为类似于pcolor,对吗?在这种情况下,最后一列和最后一行也丢失了。谢谢你的回答,我需要复制这个来理解它是如何工作的。@Vesnog现在,我让答案在Y中有两个以上不同的空格。我稍后会添加更多的解释。谢谢你的回答,我需要复制这个来理解它是如何工作的。@Vesnog现在,我让答案比Y中的两个空格更一般。我稍后会添加更多解释。P颜色可以,但我丢失了其他答案中指出的最后一行和最后一列。P颜色可以,但我丢失了其他答案中指出的最后一行和最后一列。