2011-08-28 55 views
11

我有一張圖,上面有2個圖。我試圖將這個數字保存爲一個寬度更長的png。Matlab用預定義尺寸保存圖形

%%%%%%%%%%%%First%%%%%%%%%%%%%%%%%% 
a=figure('Name','First Structure'); 
load C:\Users\William\workspace\P5\FirstAdd.txt 
n=FirstAdd(:,1); 
t=FirstAdd(:,2); 
subplot(1,2,1); 
plot(n,t); 
xlabel('n'); 
ylabel('Time'); 
title('First Structure''s Add'); 
grid on 

load C:\Users\William\workspace\P5\FirstContains.txt 
n=FirstContains(:,1); 
t=FirstContains(:,2); 
subplot(1,2,2); 
plot(n,t); 
xlabel('n'); 
ylabel('Time'); 
title('First Structure''s Contains'); 
grid on 

rect=[250,250,1080,480]; 
set(a, 'OuterPosition',rect); 
print(a,'-dpng','First Structure.png'); 

在過去的3線I設置的數字窗口,使得2個圖是足夠寬。但是,當我嘗試保存圖形時,圖像是其中圖塊被壓扁的默認大小。

我錯過了什麼?

+2

可能重複(http://stackoverflow.com/questions/3600945/printing- a-matlab-plot-in-exact-dimensions-on-paper),[如何在MATLAB中保存自定義大小的數字](http://stackoverflow.com/questions/6508233/how-to-save-custom-sized -figures合MATLAB的閉合) – Amro

回答

12

OuterPositionfigure property只改變圖形窗口在屏幕上;它不會改變它的打印方式。

當使用「打印」圖形時,Matlab使用PaperSize,PaperUnits,PaperPosition和類似圖形屬性,即使它們沒有真正意義時(例如生成位圖文件時)。 (設置PaperUnitspixels將是合乎邏輯的,但它不工作。)

的步驟與在像素得到一個特定的圖像尺寸是設置PaperPosition一些尺寸在英寸(或另一物理單元)然後指定每使用-r選項英寸點數所需分辨率print

r = 150; % pixels per inch 
set(gcf, 'PaperUnits', 'inches', 'PaperPosition', [0 0 1080 480]/r); 
print(gcf,'-dpng',sprintf('-r%d',r), 'bar.png'); 

一些特殊性,在幫助爲print討論功能。

您也可以嘗試-r0選項,告訴Matlab使用顯示分辨率。

4

繼@ nibot的例子,我寫了下面的功能:的[打印在紙張上的精確尺寸的MATLAB情節]

function save_as_png(handle, filename, dpi, width, height); 
    set(handle, 'PaperUnits', 'inches', 'PaperPosition', [0 0 width height]/dpi); 
    print(handle, '-dpng', ['-r' num2str(dpi)], filename); 
end