Matlab сохранение фигуры с предопределенным размером - PullRequest
11 голосов
/ 28 августа 2011

У меня есть фигура с 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 голосов
/ 28 августа 2011

Свойство рисунка 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 использовать разрешение экрана.

5 голосов
/ 22 августа 2013

Следуя примеру @ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...