Показатель экономии Matlab с предопределенным размером
У меня есть фигура с двумя графиками на ней. Я пытаюсь сохранить фигуру как 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' 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' Contains');
grid on
rect=[250,250,1080,480];
set(a, 'OuterPosition',rect);
print(a,'-dpng','First Structure.png');
В последних 3 строках я устанавливаю окно с рисунком так, чтобы 2 графика были достаточно широкими. Однако, когда я пытаюсь сохранить фигуру, изображение является его размером по умолчанию, в котором заговорены участки.
Что мне не хватает?
Ответы
Ответ 1
Свойство OuterPosition
изменяется только там, где на экране отображается окно с рисунком; он не изменяет способ его печати.
Matlab использует PaperSize
, PaperUnits
, PaperPosition
и подобные свойства фигуры при "печати" фигуры, даже если они действительно не имеют смысла, например, при создании растрового файла. (Настройки PaperUnits
до pixels
будут логичными, но это не сработает.)
Процедура получения определенного размера изображения в пикселях - установить 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 использовать разрешение дисплея.
Ответ 2
Следуя примеру @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