Имея в нашем распоряжении множество связанных с графиком функций в MATLAB, иногда может быть сложно выбрать, какую из них использовать для представления графика. Далее я расскажу о некоторых простых функциях, которые могут быстро улучшить эстетическую привлекательность графиков, позволяя вам уделять больше времени анализу тенденций в данных.
Вот три примера (как мне кажется) эстетических и профессиональных сюжетов, которые я создал в прошлом, внеся простые изменения, такие как те, о которых я вскоре расскажу.
Далее я расскажу, как улучшить стандартную фигуру, чтобы получить фигуру в правой части рисунка ниже:
Установка и загрузка
Все, что нам потребуется, — это набор данных (я сгенерирую его, так что не волнуйтесь, если у вас нет того, с которым вы хотели бы протестировать!) и функции MATLAB linspecer() и export_fig() . linspecer() — это созданная пользователем функция, которая создает различимые цвета, равномерно распределяя их в *воспринимаемом* пространстве, а не в пространстве RGB, а export_fig() позволяет легко сохранять рисунки. Их можно загрузить с помощью следующего процесса:
- Нажмите «Дополнения» на вкладке «Среда» в разделе «Главная» MATLAB.
- Введите «linspecer» в поле поиска всплывающего окна.
- Нажмите «Добавить», а затем «Добавить в MATLAB», что сделает функцию доступной в любом скрипте или функции MATLAB в вашей системе.
Тот же процесс можно повторить для export_fig().
Я сгенерирую несколько простых осциллирующих функций для использования в качестве набора данных следующим образом:
Приведенный выше код сгенерирует и отобразит приведенную ниже функцию, в результате чего получится график, который вы видели, и который мы будем редактировать на протяжении всей статьи.
Быстрые изменения
Есть несколько действительно быстрых изменений, которые можно внести, чтобы мгновенно улучшить сюжет. Во-первых, давайте увеличим толщину линий, чтобы они немного выделялись. Мы можем сделать это, изменив строку 11 выше на:
plot(x, y(i, :), 'LineWidth', 1.25);
Это доступ к свойству LineWidth линии и установка значения 1,25 (по умолчанию 0,5). Это типично для того, как мы будем получать доступ к свойствам через пары имя-значение в строке. Полный список возможных пар имя-значение функции plot можно найти здесь.
Давайте окружим область графика рамкой и добавим линии сетки, очень просто:
box on grid, grid minor
MATLAB автоматически выберет диапазон значений x и y, которые сочтет необходимыми для просмотра данных в полном объеме. Он выбрал диапазон значений y от -1,5 до 1, когда нам действительно нужно видеть только от -1 до 1. Давайте изменим это:
ylim([-1 1]);
Функция ylim() принимает двухэлементный вектор вида [ymin ymax], где ymax › ymin. То же самое можно сделать и для оси X, но я доволен просмотром всего диапазона, выбранного MATLAB.
Далее давайте добавим метки осей. Ниже оператора end можно добавить следующие строки:
xlabel('x'); ylabel('f(x)');
Эти простые изменения привели к следующему, который уже выглядит намного лучше!
Поскольку наши x и f(x) по своей природе являются математическими, давайте изменим наши метки, чтобы они отображались как математическое выражение с использованием LaTeX. Мы можем изменить объявления xlabel и ylabel на:
xlabel('$x \: [-]$', 'interpreter', 'latex'); ylabel('$f(x) \: [-]$', 'interpreter', 'latex');
Мы заключаем строку метки в $, чтобы показать LaTeX, что мы хотим, чтобы этот раздел отображался в математическом режиме. ‘\:’ используется для вставки пробела между x и [-], так как обычные пробелы, вставленные с помощью пробела, не распознаются LaTeX в математическом режиме. Подробнее о пробелах в математическом режиме в LaTeX можно прочитать здесь. Я включил [-] в метки, чтобы показать, что для них нет единиц, что является личным предпочтением. Чтобы гарантировать, что MATLAB знает, как отображать это как LaTeX, мы используем пару имя-значение интерпретатор и латекс, как показано. Это приводит к следующему:
Теперь наши метки не совсем соответствуют шрифту наших осей. Давайте изменим шрифт всей фигуры, добавив следующие строки ниже нашего кода:
ax = gca; ax.FontName = 'Times';
«gca» — это встроенная функция MATLAB, которая получает текущий объект оси. Мы получаем доступ к свойству FontName и меняем его на «Times» для «Times New Roman». Чтобы найти доступные системные шрифты на вашем компьютере, в командном окне можно ввести следующее:
listfonts
Что делает именно то, что написано на банке: возвращает список шрифтов, которые можно использовать, заменив «Times» шрифтом из возвращаемого списка. Обратите внимание, что если он не может найти введенный вами шрифт, по умолчанию он будет использовать Helvetica, а не выдавать сообщение об ошибке, что приятно.
Итак, вот как наша фигура выглядит на данный момент:
Легенда
В настоящее время мы не знаем, какая строка представляет собой функцию. Добавим легенду по этому поводу:
lgd = legend('Location', 'south');
Что добавит легенду в нижней части области графика;
Однако мы хотим, чтобы он отображал имена функций данных. Мы могли бы сделать это, добавив имена строк в функцию legend() через:
lgd = legend('$x \sin{x}$', '$x^2 \sin{x}$', '$x^3 \sin{x}$', '$x^4 \sin{x}$', 'Location', 'south', 'interpreter', 'latex');
Но это быстро становится громоздким с добавлением большего количества строк. Давайте сделаем это динамически в цикле for, который создает исходный график:
Мы используем функцию sprintf() для динамического создания метки вместе с парой «имя-значение» DisplayName. Несколько вещей, которые следует отметить по поводу вышеизложенного:
- sprintf() ищет обратную косую черту, чтобы идентифицировать escape-символы, такие как \n, поэтому нам нужно использовать \\sin для отображения команды LaTeX \sin
- Мы хотим, чтобы x был возведен в степень i, поэтому мы должны заключить показатель степени в {} в соответствии с нотацией LaTeX.
- %i используется sprintf() для замены целого числа тем, что идет после строки внутри функции, в нашем случае «i» — текущий показатель степени функции.
Поначалу это может сбивать с толку, но я рекомендую вам подробнее прочитать о функции sprintf() здесь, так как она может быть очень мощной. Таким образом, если мы изменим 'n' на что-то другое, легенда будет автоматически заполнена, вместо того, чтобы нам нужно было вручную изменять легенду в соответствии с нашими потребностями.
Вышеупомянутое изменение производит:
Допустим, наш сюжет сложнее, чем приведенный выше, и мы хотели бы добавить заголовок к нашей легенде, чтобы объяснить, что в ней содержится, например, в одном из моих примеров рисунков, которые я показывал ранее. Это можно очень легко сделать, добавив следующую строку под нашим объявлением легенды:
title(lgd, 'Function');
Это добавит блок заголовка к созданному нами объекту «lgd» со строкой «Функция» в качестве заголовка:
Цвета
Цветовая карта / схема MATLAB по умолчанию, Jet, вызывает некоторую критику со стороны экспертов по теории цвета. Пост Reddit, который я бы порекомендовал прочитать об этом, можно найти здесь. Простой способ избежать этого — использовать функцию linspecer(), которую мы скачали ранее. Функция linspecer(n) создает n равномерно распределенных цветов в массиве n x 3, где каждая строка представляет цвет со столбцами значений каналов R, G, B. Итак, как мы можем это использовать?
Мы можем создать массив цветов C, который мы можем использовать в нашей команде plot():
C = linspecer(n); % use the n variable we created earlier
Затем мы можем изменить вызов plot() внутри цикла for на:
plot(x, y(i, :), 'Color', C(i, :), 'DisplayName', label,'LineWidth', 1.25);
Поскольку мы хотим использовать «i-ю» строку и каждый столбец в этой строке, чтобы определить цвет графика как [R, G, B]. Это изменит цвета на:
Сохранение фигур
Функция export_fig() позволяет чрезвычайно просто сохранять рисунки в различных форматах. Для простоты давайте экспортируем наш окончательный график в виде файла .png. Открыв окно рисунка фигуры, которую вы хотите сохранить, введите следующее в командное окно:
export_fig 'figure.png' -transparent -r200
Желаемое имя файла и расширение должны быть введены после вызова export_fig в виде строки. -transparent указывает, что мы хотим, чтобы рисунок был сохранен с прозрачным фоном (опускание этого значения означало бы серый фон), а -r200 означает, что мы хотели бы сохранить его с разрешением 200 DPI (по умолчанию 150). Существует множество других настроек, с которыми вы можете поиграть, которые можно изучить, введя «help export_fig» в командном окне.
Обратите внимание, что для документов, написанных с помощью LaTeX, я бы рекомендовал встраивать файл рисунка в формате .pdf для обеспечения наивысшего качества. Этого можно легко добиться, изменив «figure.png» на «figure.pdf» в приведенном выше вызове export_fig.
Заворачивать
Что ж, есть краткий обзор вариантов более эстетичных графиков в MATLAB, надеюсь, вы нашли его полезным. Вам доступно гораздо больше сюжетных возможностей, и я призываю вас просмотреть варианты здесь.
Окончательный код файла можно найти ниже: