2011-10-31 95 views
0

正如標題所說,我試圖將網格函數的兩個變量切片(例如.jpg)作爲子圖保存。我想用.m文件來做這件事,因爲我有很多要生成的圖。我已經想出瞭如何在自己的數字上繪製觀點,但是我無法讓他們在一個數字中作爲子圖進行適當的繪製。爲了說明我的意思:MATLAB:在子圖中繪製/保存網格函數的X-Y視圖

這裏有個別地塊的產出:

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命令。

我的代碼設置了兩個子圖,然後覆蓋了網格圖的完整三維視圖,這不是我想要的。我想在一個數字上看到兩個觀點(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圖。

回答

1

當你調用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; 

這(應該)至少得到的一切顯示你想怎麼 - 我相信,彩條的規模將不對應於什麼特別(最有可能是離散的顏色數在欄中),所以需要額外的代碼以確保兩個圖都使用相同的顏色圖,並且您要更改顏色條的顏色圖。

+0

我已經試過了,當我這樣做,這是我的錯誤: ???使用==>軸出錯 輸出參數太多。 錯誤==> plotSurfaces at 51 axes1 = axes(sp1); – Dylan

+0

我剛剛嘗試將軸設置爲子圖:'axes(sp1)',然後輸入'axes1 = axes()'以獲取值。這樣做會在繪圖上正確設置座標軸(對於兩個子圖),但是它會與僞3d圖疊加,而不是所需的視圖。 – Dylan

+0

我修改了上面的答案以獲得可行的解決方案。我改變了子圖的大小,以使用''Position''屬性爲全局色條留出空間,然後使用'axes()'命令創建的較大軸設置一個色條。如果您使用兩個單獨的顏色條(每個顏色條對應一個顏色條),代碼可以大大簡化。 (上面的代碼繪製了一個大的彩條,但需要更多的工作才能使比例精確)。 –

5

這裏是一個精簡例子非常相似,你想達到什麼目的:

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

+0

看看這一個,請http://stackoverflow.com/questions/7963459/matlab-how-to-be-de-line-in-image/8032684#8032684我想你可以幫助 –

+0

我去了Andrew_L的解決方案,雖然你的工作似乎也是如此。謝謝! – Dylan