我想使用Matlab为所有图形设置相同的大小,以便以后保存。我怎样才能做到这一点?
我认为最好先绘制一个图形,然后使用命令pos = get(gcf, 'Position')
获取尺寸和位置,然后为所有其他图形设置位置。
对吗?还有更好的方法吗?
答案 0 :(得分:2)
关于如何在Matlab中保存图形,有很多选择。如果不使用“另存为”对话框,则有两个功能可供选择: saveas 和 print 。
'Position'
定义了可绘制区域的位置和大小,指定为[left bottom width height]形式的向量。该区域不包括图形边框,标题栏等。现在,您基本上就可以确定第一个图形的大小和位置,因为它出现在屏幕上并根据这些尺寸进行保存。
以这种方式保存图形时,尺寸将对应于Matlab内部定义的尺寸,或者您自己使用'Position'
属性重新定义的尺寸。但是,您并不总是希望/需要保存的图形的大小与屏幕上显示的图形的大小相同。而且,您还必须注意图形的位置,在这种情况下,您是使用set
函数检索的,在本示例中,我将跳过它。
gcf=figure;
figure_width_to_save = 12.5; %cm
figure_height_to_save= 10; %cm
location_x=2; %cm
location_y=2; %cm
gcf.Units = 'centimeters';
gcf.Position = [location_x location_y figure_width_to_save figure_height_to_save];
saveas(gcf,[savefigures_path,savefigure_name,'_saveas.tiff'],'tiffn');
print(gcf, '-dtiffn', [savefigures_path,savefigure_name,'_print.tiff'], '-r300');
但是最好单独控制用于保存图形的设置。为此,您必须定义'PaperPosition'
属性。 'PaperPosition'
定义了保存时图形的大小和在页面上的位置,指定为[左底部宽度高度]形式的四元素矢量,但是实际上,'PaperPosition'
属性不需要考虑图形的位置与使用'Position'
属性的情况一样多。
现在,关于节省本身,您没有提到使用哪种方法。
saveas 函数使用150 DPI的分辨率,并使用图形的'PaperPosition'
和'PaperPositionMode'
属性来确定图像的大小。如果要打印或保存与屏幕上的图形相同大小的图形,请确保图形的'PaperPositionMode'
属性设置为'auto'
,但我更希望控制这些属性我自己。
如果使用 saveas 将图形保存在Matlab中,则需要指定以下内容:
gcf.PaperPositionMode = 'manual';
gcf.PaperUnits = 'centimeters';
gcf.PaperPosition = [0 0 figure_width_to_save figure_height_to_save];
saveas(gcf,[savefigures_path,savefigure_name,'.tiff'],'tiffn');
功能打印还使您可以控制图形的保存分辨率。例如,标志“ -r300”将输出分辨率设置为每英寸300点。要指定屏幕分辨率,请使用“ -r0”。
print([savefigures_path,savefigure_name,'.tiff'],'-dtiffn','-r300')
Check out Matlab's examples about saving figures at specific size and resolution