2011-08-28 47 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