使用预定义大小的Matlab保存图

Ser*_*yro 11 matlab plot

我有一个带有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');
Run Code Online (Sandbox Code Playgroud)

在最后3行中,我设置了数字窗口,使得2个图足够宽.但是,当我尝试保存图形时,图像是其默认大小,其中图形被压扁.

我错过了什么?

nib*_*bot 12

OuterPosition 数字财产只改变其中的人物画面出现在屏幕上; 它不会改变它的打印方式.

Matlab的使用PaperSize,PaperUnits,PaperPosition和类似的人物属性时,"印刷"的人物,即使他们并不真正意义,这样的加工的位图文件时.(设置PaperUnitspixels将是合乎逻辑的,但它不工作.)

获取特定图像大小(以像素为单位)的过程是设置PaperPosition为以英寸(或其他物理单位)为单位的某个大小,然后使用以下选项以每英寸点数指定所需的分辨率:-rprint

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

print函数的帮助中讨论了其中一些特性.

您也可以尝试使用该-r0选项告诉Matlab使用显示分辨率.


ell*_*ben 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
Run Code Online (Sandbox Code Playgroud)