- PVSM.RU - https://www.pvsm.ru -
В написании научных статей немалую часть времени занимает подготовка иллюстраций, графиков и диаграмм. Хочу поделиться некоторыми мыслями и примерами того, как можно ускорить этот процесс. Материал пригодиться тем, кто пользуется системой MatLab.
MatLab предоставляет широкие возможности по отображению графической информации в виде графиков, диаграмм, и т.п. Однако не всегда получаемые по умолчанию иллюстрации удовлетворяют требованиям оформления статей. Для этого в системе MatLab существует множество настроек. И чтобы ускорить подготовку иллюстраций предлагаю воспользоваться несколькими строчками кода, которые помогут помочь настроить отображение графиков.
Прежде всего, необходимо настроить шрифты, которые будут использоваться для вывода значений осей и надписей на графиках, что также помогает в случаях неправильного отображения надписей на русском языке:
set(0,'DefaultAxesFontSize',14,'DefaultAxesFontName','Times New Roman');
set(0,'DefaultTextFontSize',14,'DefaultTextFontName','Times New Roman');
Затем необходимо настроить размер графика и его положение на экране, например, с отображением на весь экран:
figure('Units', 'normalized', 'OuterPosition', [0 0 1 1]);
При необходимости вставляем название графика:
title('Название');
Далее можно включить построение нескольких графиков в одном окне, c использованием тех же осей и свойств графика:
hold on;%или hold all;
Строим графики с определенным цветом, стилем и толщиной линии:
plot(X2,Y2,':k','LineWidth',3);
plot(X2,Y3,':b','LineWidth',3);
plot(X2,Y4,'-.','Color',[.1 .7 .7],'LineWidth',3);
plot(X2,Y5,'--','Color',[.1 .4 .1],'LineWidth',3);
plot(X2,Y6,'r','LineWidth',3);
Вставляем легенду в график с определенным положением на рисунке, например справа внизу:
legend('исходные данные','полином 3-й степени','полином 4-й степени','полином 5-й степени','полином 7-й степени','полином 9-й степени', 4);
При построении графика в MatLab дробные значения подписей на осях координат отображаются с разделителем в виде точки, тогда как, разделитель дробной и целой части у нас принято отображать запятой.
Чтобы не изменять вручную все значения подписей данных осей через меню графика,
BX=get(gca,'XTick');
BY=get(gca,'YTick');
xlabel(XL,'Position',[BX(size(BX,2)) BY(1)])
ylabel(YL,'Rotation',0,'Position',[BX(1) BY(size(BY,2))])
XA=get(gca,'XTickLabel');%
for i=1:size(XA,1)
z=rem(i,2);
if z==0;
if XA(i,1)~='0' && XA(i,2)~=0
XA(i,:)=char(0);
end
end
end
XA(size(XA,1),:)=char(0);
set(gca,'XTickLabel',XA);
YA=get(gca,'YTickLabel');%
for i=1:size(YA,1)
z=strfind(YA(i,:),'.');
YA(i,z)=',';
clear z;
z=rem(i,2);
if z~=0;
YA(i,:)=char(0);
end
end
YA(size(YA,1),:)=char(0);
set(gca,'YTickLabel',YA);
Код «прореживает» подписи осей x и y, а также исправляет точки на запятые в подписях на оси y. Для других осей необходимо повторить аналогичные процедуры.
И в заключении отобразим линии координатной сетки:
grid on;
Для удобства использования, чтобы не повторять каждый раз эти действия, заключаем написанный код в функцию, в параметрах которой указываются настройки отображения графиков и их данные.
function result=subgraphic(X1,X2,Y1,Y2,Y3,Y4,Y5,Y6,Tit,TL,XL,YL,PL)
figure('Units', 'normalized', 'OuterPosition', [0 0 1 1]);
plot(X1,Y1,'o','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor',[.49 1 .63],'MarkerSize',5);
if Tit
title(TL);
end
hold on;
plot(X2,Y2,':k','LineWidth',3);
plot(X2,Y3,':b','LineWidth',3);
plot(X2,Y4,'-.','Color',[.1 .7 .7],'LineWidth',3);
plot(X2,Y5,'--','Color',[.1 .4 .1],'LineWidth',3);
plot(X2,Y6,'r','LineWidth',3);
legend('исходные данные','полином 3-й степени','полином 4-й степени','полином 5-й степени','полином 7-й степени','полином 9-й степени', PL);
BX=get(gca,'XTick');
BY=get(gca,'YTick');
xlabel(XL,'Position',[BX(size(BX,2)) BY(1)])
ylabel(YL,'Rotation',0,'Position',[BX(1) BY(size(BY,2))])
XA=get(gca,'XTickLabel');%
for i=1:size(XA,1)
z=rem(i,2);
if z==0;
if XA(i,1)~='0' && XA(i,2)~=0
XA(i,:)=char(0);
end
end
end
XA(size(XA,1),:)=char(0);
set(gca,'XTickLabel',XA);
YA=get(gca,'YTickLabel');%
for i=1:size(YA,1)
z=strfind(YA(i,:),'.');
YA(i,z)=',';
clear z;
z=rem(i,2);
if z~=0;
YA(i,:)=char(0);
end
end
YA(size(YA,1),:)=char(0);
set(gca,'YTickLabel',YA);
grid on;
result=1;
Выполним
subgraphic(B,T,A,Y3,Y4,Y5,Y7,Dva_theta_0_5,Tit,'Название','{itT}, circC','{2{phi}_{0,5}, град.',3);
с заранее подготовленными данными.
По умолчанию MatLab отображает греческую букву «фи» как в кириллице «ф». Одним из способов отобразить привычную греческую букву «фи» с петлеобразным начертанием, является выбор специального шрифта c греческими буквами. Скачиваем, например, шрифт Greek Normal отсюда [1] и устанавливаем. Просмотрев шрифт Greek в таблице символов, замечаем, что в этом шрифте буква «фи» существует в двух вариантах, причем для кода латинской «f» получим тот же результат что и в MatLab в виде «ф», а для кода латинской «j» должен быть получен требуемый результат.
Выполним
subgraphic(B,T,A,Y3,Y4,Y5,Y7,Dva_theta_0_5,Tit,'Название','{itT}, circC','{2fontname{Greek}j}_{0,5}, град.',3);
В результате использования приведенного кода для построения графиков с помощью системы MatLab удалось:
И несколько полезных ссылок:
Код на Github.com [2]
Некоторые полезные средства настройки графиков (plot) в MATLAB [3]
Заметки про Matlab. Экспорт графиков. [4]
Простейшее приложение с GUI средствами MatLab 6.5 [5]
Автор: mgorb
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/matlab/44651
Ссылки в тексте:
[1] отсюда: http://www.azfonts.ru/load_font/greek_normal.html
[2] Код на Github.com: https://github.com/mgorb1/Matlab_figure.git
[3] Некоторые полезные средства настройки графиков (plot) в MATLAB: http://www.pvsm.ru/matlab/30698
[4] Заметки про Matlab. Экспорт графиков.: http://www.engineerbox.ru/page/matlab_export_fig
[5] Простейшее приложение с GUI средствами MatLab 6.5: http://habrahabr.ru/post/73440/
[6] Источник: http://habrahabr.ru/post/195842/
Нажмите здесь для печати.