我有一个带有2个图的图。我想把这个数字保存为宽度更长的png。
%%%%%%%%%%%%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行中,我设置了数字窗口,使得2个图足够宽。但是,当我尝试保存图形时,图像是其默认大小,其中图形被压扁。
我错过了什么?
答案 0 :(得分:12)
OuterPosition
figure property仅更改屏幕上图形窗口的位置;它不会改变它的打印方式。
Matlab在“打印”图形时使用PaperSize
,PaperUnits
,PaperPosition
和类似的图形属性,即使它们没有意义,例如在生成位图时文件。 (设置PaperUnits
到pixels
是合乎逻辑的,但它不起作用。)
在像素中获取特定图像尺寸的过程是将PaperPosition
设置为 inches (或其他物理单位)中的某个尺寸,然后指定使用-r
的{{1}}选项,以每英寸点数显示分辨率:
print
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');
选项,告诉Matlab使用显示分辨率。
答案 1 :(得分:5)
按照@nibot的例子,我编写了以下函数:
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