正如标题所说,我正在尝试将网格函数的2变量切片(例如,作为.jpg )保存为子图。我想使用一个.m文件来完成这项工作,因为我有很多绘图要生成。我已经知道如何在他们自己的图形上绘制视图,但我不能让它们正确地绘制为图形中的子图。为了说明我的意思:
以下是各个绘图的输出:
3D网格:3D MATLAB mesh plot
XY视图:XY MATLAB mesh view
YZ视图:YZ MATLAB mesh view
XZ视图:XZ MATLAB mesh view
下面是我的绘图代码(不起作用):
%Ambiguity Surface
fid = figure(fnum);
axes1 = axes('Parent',fid);
view(axes1,[-62.5 28]);
grid(axes1,'on');
hold(axes1,'all');
msh = mesh(taux,fdy,z,'Parent',axes1);
xlabel ('Delay - seconds');
ylabel ('Doppler - Hz');
zlabel ('Ambiguity function (Normalized Magnitude-Squared)');
fname = strcat(name,' (Ambiguity Function z(\tau;F_d))');
title(fname);
cb = colorbar('peer',axes1);
set(get(cb,'ylabel'),'String','Magnitude-Squared (dB)');
hold off;
printFig(fid,fnum,sname)
fnum = fnum + 1;
%Ambiguity Slices
fid = figure(fnum);
hold all;
subplot(2,1,1);
axes1 = axes();
grid(axes1,'on');
view(axes1,[90 0]);
msh = mesh(taux,fdy,z);
xlabel ('Delay - seconds','Visible','off');
ylabel ('Doppler - Hz');
zlabel ('Ambiguity function (Normalized Magnitude-Squared)','Visible','off');
fname = strcat(name,' (Ambiguity Function Slice z(\tau;F_d) @ \tau = 128)');
title(fname)
subplot(2,1,2);
axes2 = axes();
grid(axes2,'on');
view(axes2,[0 0]);
msh = mesh(taux,fdy,z);
xlabel ('Delay - seconds','Visible','off');
ylabel ('Doppler - Hz','Visible','off');
zlabel ('Ambiguity function (Normalized Magnitude-Squared)','Visible','off');
cb = colorbar('peer',axes2);
set(get(cb,'ylabel'),'String','Magnitude-Squared');
fname = strcat(name,' (Ambiguity Function Slice z(\tau;F_d) @ F_d = 0)');
title(fname)
hold off;
printFig(fid,fnum,slname)
fnum = fnum+1;printFig()只是设置目录信息并执行print命令。
我的代码设置了两个子图,然后覆盖了网格图的完整3-d视图,这不是我想要的。我想在一个图形上看到两个视图(XZ和YZ)。
谢谢你的帮助!
-Dylan
编辑:根据@Andrew_L的建议,我在代码中修改了以下内容:
sp1 = subplot(2,1,1);
axes(sp1);
axes1 = axes();
grid(axes1,'on');
view(axes1,[90 0]);
msh = mesh(taux,fdy,z,'Parent',axes1);对于另一个子图也是如此。然而,结果仍然是一样的。它似乎正确地设置了两个空白子图,然后在其上显示了完整的伪3D图。
发布于 2011-11-09 09:48:24
下面是一个与您正在尝试实现的目标非常相似的示例:
%# create axes, and set the view of each
hAx(1) = subplot(221); h = mesh(peaks); view(3)
hAx(2) = subplot(222); copyobj(h,hAx(2)); view(0,90), title('X-Y')
hAx(3) = subplot(223); copyobj(h,hAx(3)); view(0,0) , title('X-Z')
hAx(4) = subplot(224); copyobj(h,hAx(4)); view(90,0), title('Y-Z')
%# set properties of axes
for i=1:4
grid(hAx(i), 'on')
axis(hAx(i), 'tight')
xlabel(hAx(i), 'Delay (sec)');
ylabel(hAx(i), 'Doppler (Hz)');
zlabel(hAx(i), 'Ambiguity function');
end
title(hAx(1), 'Short Tone Ping z(\tau;F_d)')
hc = colorbar('Peer',hAx(1));
set(get(hc,'YLabel'), 'String','Magnitude-Squared (dB)')

发布于 2011-11-01 13:21:18
在subplot(2,1,1);下面调用axes1 = axes();时,在不带任何参数的情况下调用axes()时,会将axes1设置为默认的全窗口轴,这会导致重叠。相反,可以尝试使用subplot返回的句柄来生成轴句柄。在第二部分中尝试使用以下代码:
%Ambiguity Slices
fid = figure(fnum);
H1 = subplot(2,1,1);
pos1 = get(H1, 'Position');
set(H1,'Position',[pos1(1) pos1(2) 0.8*pos1(3) pos1(4)]); %leave space for colorbar;
grid on;
msh = mesh(taux,fdy,z);
view([90 0]);
mapping = caxis;
xlabel ('Delay - seconds','Visible','off');
ylabel ('Doppler - Hz');
zlabel ('Ambiguity function (Normalized Magnitude-Squared)','Visible','off');
fname = strcat(name,' (Ambiguity Function Slice z(\tau;F_d) @ \tau = 128)');
title(fname)
H2 = subplot(2,1,2);
pos2 = get(H2, 'Position');
set(H2,'Position',[pos2(1) pos2(2) 0.8*pos2(3) pos2(4)]); %leave space for colorbar;
grid on;
msh = mesh(taux,fdy,z);
caxis(mapping);
view([0 0]);
xlabel ('Delay - seconds','Visible','off');
ylabel ('Doppler - Hz','Visible','off');
zlabel ('Ambiguity function (Normalized Magnitude-Squared)','Visible','off');
axes('Position', [0.05 0.05 0.9 0.9], 'Visible', 'off'); %setup axes for colorbar;
caxis(mapping);
cb = colorbar();
ylabel(cb, 'Magnitude-Squared');
fname = strcat(name,' (Ambiguity Function Slice z(\tau;F_d) @ F_d = 0)');
title(fname)
printFig(fid,fnum,slname)
fnum = fnum+1;这(应该)至少让一切按照你想要的方式显示--我相信颜色条比例不会对应任何特定的东西(最有可能的是条中离散颜色的数量),所以需要额外的代码来确保两个绘图使用相同的色彩映射表,并且你改变了色彩条的色彩映射表。
https://stackoverflow.com/questions/7960059
复制相似问题