Сохранить график в файл JPEG в Matlab - PullRequest
2 голосов
/ 16 ноября 2011

Я разработал следующий графический интерфейс, в котором есть оси. Я хочу сохранить график, нарисованный внутри них, в файл JPEG. Однако полученный файл является изображением всего окна рисунка. Это мой код:

    X = 0:pi/100:2*pi;
    Y = sin(X);
    fh = figure;
    Pan1 = uipanel(fh,'Units','normalized','Position',[0 0 0.5 1],'title',...
        'Panel1');
    Pan2 = uipanel(fh,'Units','normalized','Position',[0.5 0 0.5 1],'title',...
        'Panel2');
    haxes = axes('Parent',Pan2,'Units', 'normalized','Position',...
        [0.25 0.25 0.5 0.5]);
    hplot = plot(haxes,X,Y);
    xlabel(haxes,'Time (second)');
    ylabel(haxes,'Amplitude (meter)');
    title(haxes,'Sine function');
    FileName = uiputfile('*.jpg','Save as');
    saveas(hplot,FileName);

Ответы [ 4 ]

4 голосов
/ 16 ноября 2011

saveas сохраняет только цифры, а не отдельные графики.

Если у вас есть подзаговор или участок в uicontrol, как у вас, вы можете сделать временную копию графика, сохранить его, а затем удалить временную копию:

ftmp = figure; atmp = axes;
copyobj(hplot, atmp);
saveas(ftmp, FileName);
delete(ftmp);

Если вы не хотите, чтобы временная копия вспыхивала на экране во время шага копирования, вы можете использовать свойство 'Position' рисунка, чтобы создать его вне экрана.

Надеюсь, это поможет!

2 голосов
/ 16 ноября 2011

@ Ответ Сэма точен, я просто хочу добавить, что Matlab достаточно умен, чтобы знать, какой тип файла вы хотите сохранить, проверив строковую переменную FileName. Если вы установите FileName на то, что оканчивается на .jpg, вы можете сохранить JPEG. Проверьте saves документы , чтобы увидеть все другие возможные типы файлов.

1 голос
/ 28 июля 2013

При использовании функции saveas для создания jpeg разрешение отличается, как при ручном сохранении рисунка с помощью File -> Save As ..., вместо этого рекомендуется использовать hgexport следующим образом:

hgexport(gcf, 'figure1.jpg', hgexport('factorystyle'), 'Format', 'jpeg');

Это будет сделано точно так же, как при сохранении фигуры вручную.

Источник: http://www.mathworks.com/support/solutions/en/data/1-1PT49C/index.html?product=SL&solution=1-1PT49C

0 голосов
/ 17 ноября 2011

Это мое решение, основанное на ответах Сэма Робертса и эйканала :

X = 0:pi/100:2*pi;
Y = sin(X);
fh = figure('toolbar','none','menubar','none');
Pan1 = uipanel(fh,'Units','normalized','Position',[0 0 0.5 1],'title',...
    'Panel1');
Pan2 = uipanel(fh,'Units','normalized','Position',[0.5 0 0.5 1],'title',...
    'Panel2');
haxes = axes('Parent',Pan2,'Units', 'normalized','Position',...
[0.125 0.1 0.75 0.75]);
hplot = plot(haxes,X,Y);
xlabel(haxes,'Time (second)');
ylabel(haxes,'Amplitude (meter)');
title(haxes,'Sine function');
FileName = uiputfile('*.bmp;*.png;*.jpg;*.tif','Save as');
ftmp = figure('Menu','none','Toolbar','none','Units','normalized',...
    'Position',[-1000 -1000 1 1]); 
new_axes = copyobj(haxes, ftmp);
set(new_axes,'Units','normalized','Position',[0.1 0.1 0.8 0.8]);
saveas(ftmp, FileName);
delete(ftmp);
delete(fh);
...