Вывод графиков на широкий экран и сохранение в JPEG

Обсуждение форума и архива форума www.matlab.ru

Модератор: Admin

Burunduk
Пользователь
Сообщения: 33
Зарегистрирован: Вт окт 23, 2012 10:58 am

Вывод графиков на широкий экран и сохранение в JPEG

Сообщение Burunduk » Пт фев 22, 2013 6:04 am

На широком мониторе(9:16) функция figure создаёт фигуру в пропорциях 3:4. Причем не на весь экран.
При использовании функции plot остаются большие поля слева и справа.

Следующий код вроде решает эти проблемы:

[pathstr, name, ext] = fileparts(SecPathName);

%формируем часовую шкалу и подписи за сутки
Xtochki = [NewSampleTime(1): 1/24 : NewSampleTime(1)+1];
Xmetki = datestr([NewSampleTime(1): 1/24 : NewSampleTime(1)+1], 'HH');
Xmetki(25 , :) = ' ';

%left bottom width height
pos_plot1 = [0.028 0.05 0.962 0.92]; %Это опеределено при помощи граф редактора, нормированные координаты

%Получаем размер полного экрана в пикселах

SS = get(0,'ScreenSize');

%Создаём фигуру максимального размера
hf = figure('Position',SS);

% Рисуем секундные данные за сутки
plot(NewSampleTime,NewSample1,'r');

%Маркируем и подписываем временную шкалу
set(gca,'XTick', Xtochki);
set(gca,'XTickLabel', Xmetki)

%Задаём сетку
set(gca,'XMinorTick', 'on');
grid on;
grid minor;

title([INI.Title1 ' ' LI.StartDate]);

% p=get(gca,'position');

%задаём новые размеры осей, т.е прямоугольника в котором идет отрисовка графика
set(gca,'position', pos_plot1);

%На всякий случай еще раз максимизируем окно с графиком
set(hf,'position', SE);

% Сохраняем график как картинку в формате JPEG

s = [INI.NewGrafPath 'V_' name '_K1.jpg']
saveas(hf,s);
s = ['График сохранен в файл ' s]
fprintf(fidProt , '%s\r\n' , s);


% Сохраняем график как фигуру в формате fig MATLAB

s = [INI.NewGrafPath 'V_' name '_K1.fig']
saveas(hf,s);
s = ['График как фигура сохранен в файл ' s]
fprintf(fidProt , '%s\r\n' , s);

close(hf);


Всё вроде работает как надо, но есть два вопроса:

1. График создаётся на полный экран и растягивается влево-вправо, вверх-вниз нормально. Это видно под отладчиком. И это состояние нормально сохраняется в файл фигуры. Но в jpeg сохраняется сжато по диагонали. Причем это если сохранение через функцию saveas.
Если сохранение вручную через меню "сохранить как", то картинка сохраняется идеально. Например, если открыть файл фигуры и сохранить в JPEG вручную.
Получается функция saveas работает не совсем так как меню граф редактора? КАК ЭТО МОЖНО ПОБОРОТЬ?

2. Если открыть фигуру с графиком в графредакторе, то там есть замечательная кнопка - DataCoursor. Это когда ведешь мышом или стрелкой указатель по графику, а в подсказке рядом высвечиваются значения X и Y. Поскольку X - это время, то через контекстное меню SelectTextUpdateFunction задаю свою CallBack функцию:

function output_txt = myfunction(obj,event_obj)
% Display the position of the data cursor
% obj Currently not used (empty)
% event_obj Handle to event object
% output_txt Data cursor text string (string or cell array of strings).

pos = get(event_obj,'Position');
output_txt = {['X: ',datestr(pos(1),'yyyy.mm.dd; HH:MM:SS.FFF')],...
['Y: ',num2str(pos(2),6)]};

% If there is a Z-coordinate in the position, display it as well
if length(pos) > 2
output_txt{end+1} = ['Z: ',num2str(pos(3),4)];
end

КАК ЗАДАТЬ ЭТУ ФУНКЦИЮ В СОХРАНЯЕМОЙ ФИГУРЕ ПРОГРАММНО?
ГДЕ БУДЕТ СОХРАНЕН КОД ЭТОЙ ФУНКЦИИ? В файле фигуры или там лишь ссылка на каталог Матлаба по умолчанию?

Burunduk
Пользователь
Сообщения: 33
Зарегистрирован: Вт окт 23, 2012 10:58 am

Re: Вывод графиков на широкий экран и сохранение в JPEG

Сообщение Burunduk » Пт май 12, 2017 5:36 am

Ответ на 1 вопрос нашёлся:


SE = get(0,'ScreenSize');
SE(3) = SE(3)*1.2; %подбор коэффициентов для максимального заполнения экрана
SE(4) = SE(4)*1.2;

dpi = 100;

set(gcf,'PaperUnits', 'inches', 'PaperPosition',[SE]/dpi) ;

drawnow

saveas(hf,'grafik.png');