Сегодня я злой, придирчивый, детки, — хмурясь и опуская брови, сказал Репин. — Ко мне сегодня без лошадки не подходи. Надо уметь нарисовать лошадку — вот в чем суть, господа художники! Сумеете нарисовать лошадку — мигом подобрею.
Цитата из воспоминаний о И.Е. Репине, приведенная в эссе В. Березина "Лошадь Репина" ("Новый мир", №11, 2022).
1. Специальное художественное оформление и сохранение графиков
Могут возникать ситуации, когда более наглядно будет не использовать разметку осей по умолчанию, а специально указать положение меток и то, что на них должно быть указано, допустим, какие либо текстовые обозначения. В качестве примера рассмотрим, как может быть сформирован при помощи MATLAB/Octave график (панель (А) на рисунке ниже) с такой же разметкой, как на рис. 13.2.3 в учебнике Зельдовича-Яглома (панель (В) на рисунке ниже):
В этом случае положение четырех меток по оси абсцисс указано свойством 'XTick' объекта - текущих осей (gca), а соответствующие им подписи - свойством объекта 'XTickLabel' в виде массива ячеек (cell, т.е. в фигурных скобках), содержащих текстовые подписи, т.е.
set(gca,'XTick',[0,R*C,2*R*C,3*R*C],...
'XTickLabel',{'0','RC','2RC','3RC'},...
'YTick',E0,'YTickLabel',{'E_0'});
Здесь троеточия в конце строки позволяют переносить длинную последовательность команд на новую строку. С осью ординат - аналогично, только не 'XTick' и 'XTickLabel', а 'YTick' и 'YTickLabel'.
Помимо этого, для подписей на осях (а также в легенде или вообще тексте, помещённом на график) могут потребоваться формы букв и символов, отсутствующие по умолчанию, формулы и т.п. В этом случае следует воспользоваться нотацией LaTeX (см. для справки 'Математические формулы в LaTeX'), заключив надпись в символы формулы $ и указав свойство 'Interpreter', 'Latex' - например, для оси ординат на рисунке (А) выше
ylabel('$\varphi,~\mathrm{V}$','Interpreter','Latex')
Здесь ~ задает фиксированный пробел, а \mathrm{} делает текст внутри прямым шрифтом (что есть стандарт для единиц измерений, в отличие от переменных в формулах).
Кроме того, для создания прилично выглядящих графиков для публикаций их надо сохранять в виде графических файлов на диск. Процедура по умолчанию (Save as) в меню существенно зависит от разрешения монитора и размера развернутого окна (Figure). Поэтому надежнее распечатывать графики в командном режиме с явным указанием размера картинки (например, с сантиметрах). Это делается указанием свойств текущего графического окна (gcf), например, как
set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 20 5],'PaperSize',[20 5])
Сама команда распечатки
print('FigRC2','-dpng','-r150')
Здесь 'FigRC2' - имя графического файла для сохранения (расширение будет подставлено автоматически), буквосочетание после '-d' - тип файла ('-dpng' - растровый рисунок в PNG, '-dpdf' - векторный график в pdf, такой вариант может быть предпочтительным когда график содержит только линии - векторный формат их прорисовывает именно гладкими линиями, не растеризирует надписи, сохраняя буквы более гладкими, и т.п.), число после -r - разрешение dpi (требования к качественно выглядящим типографским графикам могут содержать явное указание, например 300dpi, то есть это -r300).
Программный код полностью - по ссылке. Там также показано, как включить в фигуру картинку из графического файла - считать ее командой imread и построить сформированную таким образом RGB матрицу как изображение без осей координат (imshow).
2. Выгрузка комментированного кода результатов его выполнения в виде документа html
Обе программы, MATLAB и GNU Octave, позволяют сохранять программный код в виде веб-страницы с текстом, формулами, заголовками, комментирующими расчетный код, см. например, презентацию материалов второго занятия.
Основная конструкция оформления исходного кода для этой цели - разделять блоки комментирующего текста и исполнимого кода двойным знаком коментария %%, см. оформление, приводящее к упомянутой презентации, по ссылке на исходный m-файл. В текстовых разделах можно употреблять и более структурирующую их разметку - перечень соответствующих команд см. на сайтах разделов помощи MATLAB или Octave.
После этого программу надо не просто выполнить (run), а опубликовать (publish), создастся папка html, которая будет содержать сформированный документ и графики к нему (если при оформлении вставлялись внешние картинки, то их надо скопировать туда же). В MATLAB это можно сделать прямо из среды кнопкой - на вкладке Publish (и там же есть настройки), в GNU Octave это делается из командной строки командой publish('имя_файла.m') - сам файл с кодом, называющийся имя_файла.m при этом в редакторе можно и не открывать.
Небольшая тонкость, касающаяся процесса в Octave: по умолчанию программы, проводящие разметку в процессе, рассчитаны на кодировку UTF-8. Поэтому, если m-файл создан в Windows в кодировке CP1251 (или на Mac'e в его кодировке), то при попытке запустить publish с таким файлом вылезет ошибка. Поэтому файл надо сконвертировать в кодировку UTF-8 (например, при помощи Notepad++) и использовать в аргументе publish уже этот сконвертированный вариант.
Кроме того, в стилевом файле по умолчанию имя заголовка подставляется по-английски, самый просто способ исправить - открыть любым блокнотом сгенерированный html-файл, найти там строку <h2>Contents</h2> и заменить ее на <h2>Содержание</h2>.
И вообще в целом, этот файл - стандартный простой html со встроенной таблицей стилей (css), которую можно настроить, открыв и скорректировав файл как текстовый. Например, Octave, в отличие от MATLAB'а по умолчанию печатает код в рамке на белом фоне (MATLAB - на светло-сером). Использовать светло-серый фон можно добавив background-color: LightGray в стиля участков кода, т.е. сделав
pre.oct-code {
border: 1px solid Grey;
padding: 5px;
background-color: LightGray
}
И так с любым форматированием - это уже делается стандартными методами, можно вручную в блокноте, можно в Word'e или его аналогах и т.п. Сгенерированный html файл можно также конвертировать в другие удобные форматы, используя, например, свободную программу Pandoc.