首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB:在子图中绘制/保存网格函数的X-Y视图

MATLAB:在子图中绘制/保存网格函数的X-Y视图
EN

Stack Overflow用户
提问于 2011-11-01 05:39:09
回答 2查看 10.4K关注 0票数 0

正如标题所说,我正在尝试将网格函数的2变量切片(例如,作为.jpg )保存为子图。我想使用一个.m文件来完成这项工作,因为我有很多绘图要生成。我已经知道如何在他们自己的图形上绘制视图,但我不能让它们正确地绘制为图形中的子图。为了说明我的意思:

以下是各个绘图的输出:

3D网格:3D MATLAB mesh plot

XY视图:XY MATLAB mesh view

YZ视图:YZ MATLAB mesh view

XZ视图:XZ MATLAB mesh view

下面是我的绘图代码(不起作用):

代码语言:javascript
复制
%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的建议,我在代码中修改了以下内容:

代码语言:javascript
复制
sp1 = subplot(2,1,1);
       axes(sp1);
       axes1 = axes();
       grid(axes1,'on');
       view(axes1,[90 0]);
       msh = mesh(taux,fdy,z,'Parent',axes1);

对于另一个子图也是如此。然而,结果仍然是一样的。它似乎正确地设置了两个空白子图,然后在其上显示了完整的伪3D图。

EN

回答 2

Stack Overflow用户

发布于 2011-11-09 09:48:24

下面是一个与您正在尝试实现的目标非常相似的示例:

代码语言:javascript
复制
%# 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)')

票数 5
EN

Stack Overflow用户

发布于 2011-11-01 13:21:18

subplot(2,1,1);下面调用axes1 = axes();时,在不带任何参数的情况下调用axes()时,会将axes1设置为默认的全窗口轴,这会导致重叠。相反,可以尝试使用subplot返回的句柄来生成轴句柄。在第二部分中尝试使用以下代码:

代码语言:javascript
复制
%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;

这(应该)至少让一切按照你想要的方式显示--我相信颜色条比例不会对应任何特定的东西(最有可能的是条中离散颜色的数量),所以需要额外的代码来确保两个绘图使用相同的色彩映射表,并且你改变了色彩条的色彩映射表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7960059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档