是否可以在imagesc
中为x轴指定一个列向量,使得刻度和数据点(像素)放在相应的点上?据我从手册中了解,您只需指定图像的角落,只要您的数据均匀间隔(如100:100:1000
),这就不是问题。
在我的例子中,x轴由21个元素组成,它们均匀地间隔为1200:50:1700
,而y轴是两个均匀间隔的列向量200:50:450
和{{1}的垂直连接}。我的目标是将数据点(像素)放在正确的位置,但似乎不可能这样做。有解决方法吗?
答案 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
结果:
答案 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]);
(小心图像数据和实际数据之间的所有上下翻转)