Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB:在子地块中绘制/保存网格函数的X-Y视图_Matlab_3d_Plot_Mesh_Subplot - Fatal编程技术网

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

MATLAB:在子地块中绘制/保存网格函数的X-Y视图,matlab,3d,plot,mesh,subplot,Matlab,3d,Plot,Mesh,Subplot,正如标题所说,我正试图将网格函数的2变量切片(例如,作为.jpg)保存为子地块。我想用一个.m文件来实现这一点,因为我有许多绘图要生成。我已经知道如何在他们自己的图形上绘制视图,但我无法让他们在图形中正确地绘制为子图形。为了说明我的意思: 以下是各个绘图的输出: 三维网格: XY视图: YZ视图: XZ视图: 这是我的绘图代码(不工作): printFig()只设置目录信息并执行print命令 我的代码设置了两个子图,然后覆盖了网格图的完整三维视图,这不是我想要的。我想在一个图形上看到两个视图(

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

以下是各个绘图的输出:

三维网格:
XY视图:
YZ视图:
XZ视图:

这是我的绘图代码(不工作):

printFig()只设置目录信息并执行
print
命令

我的代码设置了两个子图,然后覆盖了网格图的完整三维视图,这不是我想要的。我想在一个图形上看到两个视图(XZ和YZ)

谢谢你的帮助

-迪伦

编辑: 根据@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绘图。

当您调用
axes1=axes()右下方<代码>子批次(2,1,1)
,在调用
axes()
时,您正在将
axes1
设置为默认的完整窗口轴,而没有任何参数,这会导致重叠。相反,请尝试使用
子批返回的句柄来生成轴句柄。请为第二部分尝试以下代码:

%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;

这(应该)至少能让你想要的一切都显示出来-我相信颜色条比例不会与任何特别的东西对应(很可能是条中离散颜色的数量),所以需要额外的代码来确保两个图使用相同的颜色映射,当您调用
axes1=axes()时,您可以更改颜色栏的颜色映射。

右下方<代码>子批次(2,1,1)
,在调用
axes()
时,您正在将
axes1
设置为默认的完整窗口轴,而没有任何参数,这会导致重叠。相反,请尝试使用
子批返回的句柄来生成轴句柄。请为第二部分尝试以下代码:

%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;

这(应该)至少能让你想要的一切都显示出来-我相信颜色条比例不会与任何特别的东西对应(很可能是条中离散颜色的数量),所以需要额外的代码来确保两个图使用相同的颜色映射,更改颜色栏的颜色映射。

下面是一个与您尝试实现的非常类似的示例:

%# 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)')

以下是一个与您试图实现的目标非常相似的示例:

%# 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)')

我试过,当我这样做时,我得到的错误是:???使用==>轴时出错输出参数过多。在51轴1=轴(sp1)上绘制曲面时出错==>;我只是尝试将axes设置为子批:“axes(sp1)”,然后键入“axes1=axes()”以获取值。这样做可以在绘图上正确地设置轴(对于两个子绘图),但是它会覆盖伪3d绘图而不是所需的视图。我修改了上面的答案以获得可行的解决方案。我使用
'Position'
属性更改了子图的大小,以便为全局颜色栏腾出空间,然后使用
axes()
命令创建的较大轴设置颜色栏。如果您使用两个单独的颜色条,每个子批次一个,代码可以大大简化。(上面的代码绘制了一个大的色条,但需要更多的工作才能获得准确的比例)。这很接近!!下面是我的结果:绘图看起来很棒,但“view()”命令没有改变视图。结果是两者的伪3D视图完全相同。我尝试将输入向量更改为view(),它总是产生相同的结果。应该生成的视图分别是XZ和YZ。看起来
view()
命令正在工作,但是
mesh()
命令正在将视点重置为默认值。将view命令放置到after mesh()可以解决此问题。我将更正上面的代码。此外,我还使用
caxis
函数添加了几行,这应该确保第二个子图具有相同的颜色映射,并且颜色条值对应于绘图。(例如,在您的链接图像中,暗红色不等于65)我尝试过,当我这样做时,我得到的错误是:???使用==>轴时出错输出参数过多。在51轴1=轴(sp1)上绘制曲面时出错==>;我只是尝试将axes设置为子批:“axes(sp1)”,然后键入“axes1=axes()”以获取值。这样做可以在绘图上正确地设置轴(对于两个子绘图),但是它会覆盖伪3d绘图而不是所需的视图。我修改了上面的答案以获得可行的解决方案。我使用
'Position'
属性更改了子图的大小,以便为全局颜色栏腾出空间,然后使用
axes()
命令创建的较大轴设置颜色栏。如果您使用两个单独的颜色条,每个子批次一个,代码可以大大简化。(上面的代码绘制了一个大的色条,但需要更多的工作才能获得准确的比例)。这很接近!!下面是我的结果:绘图看起来很棒,但“view()”命令没有改变视图。结果是两者的伪3D视图完全相同。我尝试将输入向量更改为view(),它总是产生相同的结果。应该生成的视图分别是XZ和YZ。看起来
view()
命令正在工作,但是
mesh()
命令正在将视点重置为默认值。将view命令放置到after mesh()可以解决此问题。我将更正上面的代码。此外,我还使用
caxis
函数添加了几行代码,这应该确保第二个子图具有相同的颜色映射,并且