Matlab保存预定义大小的图形

11

我有一个包含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个绘图足够宽。然而,当我尝试保存图形时,图像的默认大小是压缩的绘图。我错过了什么?

2个回答

12
OuterPosition图形属性只会改变图形窗口在屏幕上的位置,而不会改变打印时的效果。
Matlab在“打印”图形时使用PaperSizePaperUnitsPaperPosition等类似的图形属性,即使它们在生成位图文件时并没有实际意义。(将PaperUnits设置为pixels是合理的,但不起作用。)
获取特定像素大小的图像的过程是将PaperPosition设置为一些以英寸(或其他物理单位)为单位的大小,然后使用print命令的-r选项指定所需的每英寸点数分辨率
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使用显示分辨率。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接