MATLAB: построение графиков / сохранение X-Y представлений о функции сетки на вспомогательных участках - PullRequest
0 голосов
/ 01 ноября 2011

Как видно из заголовка, я пытаюсь сохранить срезы с 2 переменными функции сетки (например, в формате .jpg) в качестве вспомогательного участка.Я хочу сделать это, используя файл .m, потому что у меня есть много графиков для генерации.Я выяснил, как изобразить представления на их собственных фигурах, но я не могу заставить их правильно изобразить их в виде подзаговоров внутри фигуры.Чтобы проиллюстрировать, что я имею в виду:

Вот результаты на отдельных графиках:

3D-сетка: 3D-график сетки MATLAB
Вид XY: XY MATLABвид сетки
вид YZ: YZ вид сетки MATLAB
вид XZ: вид сетки XZ MATLAB

А вот мойкод печати (не работает):

%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вид сетки, что не то, что я хочу.Я хотел бы видеть два вида (XZ и YZ) на одной фигуре.

Спасибо за помощь!

-Дилан

РЕДАКТИРОВАТЬ: Per @ Andrew_L'sпредложение, я изменил это в своем коде:

sp1 = subplot(2,1,1);
       axes(sp1);
       axes1 = axes();
       grid(axes1,'on');
       view(axes1,[90 0]);
       msh = mesh(taux,fdy,z,'Parent',axes1);

Это повторяется для другого участка.Результат все тот же, однако.Похоже, что для правильной настройки двух пустых вспомогательных сюжетов поверх них отображается полный псевдо-3D-график.

Ответы [ 2 ]

5 голосов
/ 09 ноября 2011

Вот раздетый пример, очень похожий на то, что вы пытаетесь достичь:

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

screenshot

1 голос
/ 01 ноября 2011

Когда вы вызываете axes1 = axes(); прямо под subplot(2,1,1);, вы устанавливаете axes1 для оси полного окна по умолчанию, когда вы вызываете axes() без каких-либо аргументов, что вызывает наложение.Вместо этого попробуйте использовать дескриптор, возвращаемый 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;

Это (должно) по крайней мере, чтобы все отображалось так, как вы хотите - я считаю, что шкала цветовой шкалы не будет соответствовать чему-то конкретному (скорее всего, числоотдельные цвета на панели), поэтому требуется дополнительный код, чтобы убедиться, что на обоих графиках используется одна и та же карта цветов, и что вы изменили карту цветов для панели цветов.

...