Как сделать легенду в матлабе

Добавил пользователь Алексей Ф.
Обновлено: 10.09.2024

Пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него, называется легендой. Для создания легенды используются различные варианты команды legend:

legend(stringl,string2. strings. ) — добавляет к текущему графику легенду в виде строк, указанных в списке параметров;

legend (H.stringl,string2. strings. ) — помещает легенду на график, содержащий объекты с дескрипторами Н, используя заданные строки как метки для соответствующих дескрипторов;

legend( АХ . . ) — помещает легенду в осях (объект класса axes) с дескриптором АХ;

legend (М) — размещает легенду, используя данные из строковой матрицы М;

legend OFF — устраняет ранее выведенную легенду;

legend — перерисовывает текущую легенду, если таковая имеется;

legend( I egendhandl е) — перерисовывает легенду, указанную дескриптором legendhandle;

legend (. Pos) — помещает легенду в точно определенное место, специфицированное параметром Pos:

Pos=0 — лучшее место, выбираемое автоматически;

Pos=l — верхний правый угол;

Pos=2 — верхний левый угол;

Pos=3 — нижний левый угол;

Pos=4 — нижний правый угол;

Pos=-l — справа от графика.

Чтобы перенести легенду, установите на нее курсор, нажмите левую кнопку мыши и перетащите легенду в необходимую позицию.

[legh,objh]=legend(. ) — эта функция возвращает дескриптор объекта для легенды (legh) и матрицу objh, содержащую дескрипторы объектов, из которых легенда состоит.

Команда 1 egend может использоваться с двумерной и трехмерной графикой и со специальной графикой — столбцовыми и круговыми диаграммами и т. д. Двойным щелчком можно вывести легенду на редактирование.

Пример, приведенный ниже, строит график трех функций с легендой, размещенной в поле графика:

Полученный график представлен на рис. 6.36.

Рис. 6.36. График трех функций с легендой в поле графика

Незначительная модификация команды legend (применение дополнительного параметра -1) позволяет построить график трех функций с легендой вне поля графика:

Соответствующий график показан на рис. 6.37.

Рис. 6.37. График трех функций с легендой, расположенной вне поля графика

В данном случае недостатком можно считать сокращение полезной площади самого графика. Остальные варианты расположения легенды пользователю предлагается изучить самостоятельно. Следует отметить, что применение легенды придает графикам более осмысленный и профессиональный вид. При необходимости легенду можно переместить мышью в подходящее место графика.

Каждый цвет должен иметь другую легенду, т.е. Красный 'r' должен сказать upregulated, синий 'b' downregulated и зеленый 'g' нерегулируемый.

Я попытался поместить код сразу после установки цвета, но это не работает.

Мне действительно нужен цветной ключ, чтобы представить, настроены ли мои сюжеты, регулируются или не регулируются, т.е. 3 ключа только в легенде.

Если я правильно понял ваш вопрос, у вас есть 24 строки на вашем графике, которые являются одним из трех цветов, и вы хотите, чтобы в легенде отображались только те 3 цвета с соответствующим текстом. Вот решение, которое, я думаю, должно работать:

Обратите внимание, что код предполагает, что есть по крайней мере один график каждого цвета, в противном случае он будет выходить из строя, потому что соответствующее значение col_idx будет равно 0 а при индексировании h_plot оно не будет работать.

Графики в Matlab, также как в табличном процессоре, могут быть построены по узловым точкам. Поскольку MATLAB — матричная система, совокупность узловых точек у(х) для построения графика задается векторами X и Y одинакового размера.

Графики MATLAB строит в отдельных окнах, называемых графическими окнами. В главном меню окна есть позиция Tools (Инструменты), которая позволяет вывести или скрыть инструментальную панель, видимую в верхней части окна графики. Средства этой панели позволяют легко управлять параметрами графиков и наносить на них текстовые комментарии в любом месте.

В Matlab для построения графиков функций по узловым точкам в декартовой системе координат служит функция plot. Функция plot имеет несколько синтаксических конструкций:
- plot (X, Y) - строит график функции у(х), координаты точек (х, у) которой берутся из векторов одинакового размера Y и X. Если X или Y матрица, то строится семейство графиков по данным, содержащимся в колонках матрицы;
- plot(Y) — строит график у(i), где значения у берутся из вектора Y, a i представляет собой индекс соответствующего элемента. Если Y содержит комплексные элементы, то выполняется команда plot (real (Y), imag(Y)). Во всех других случаях мнимая часть данных игнорируется;
- plot(X,Y,S) — аналогична команде plot(X,Y), но тип линии графика можно задавать с помощью строковой константы S. Значениями константы S могут быть следующие символы:

Если функция задана аналитической моделью, то для построения графика нужно определить вектор значений аргумента для узловых точек, вычислить значения функции при заданных значениях аргумента и сохранить эти значения в виде вектора, а затем применить функцию plot. Приведенный ниже пример иллюстрирует построение графика функций — sin(x) по узловым точкам :

>> x=[0; 0.4; 0.8; 1.2; 1.4;1.8;2.2;2.6;3;3.4;3.8]; Y=sin(x); plot(x,Y)

В этом примере уже определены значения вектора x , вычисляемые значения функции содержатся в векторе Y.

Построение двумерного графика одной функции

Для того, чтобы построить график функции y = f(x) , необходимо сформировать два одномерных массива x и y одинаковой размерности, а затем использовать функцию plot .

Пример 1 . Требуется построить график функции на интервале значений X [-1; 1].

 основная легенда

Относительно просто добавить базовые модификации к маркерам в легендах Matlab. Легенда, созданная в следующем фрагменте кода ( ):

hold on h = plot(inf,inf,'ob',inf,inf,'r+'); legend(h,'Data1','Data2');

 измененная легенда

Может быть легко изменен на: , используя следующий код:

[~,~,icons,~] = legend(h,'Data1','Data2'); set(icons(1),'LineStyle','-') set(icons(2),'LineStyle','-')

Кто-нибудь знает документ, содержащий расширенную информацию для настройки легенды? Или как лучше использовать многочисленные свойства графических объектов, предоставляемых Matlab, для достижения того, что описано выше?

1 ответ

В версии MatLab до R2014a legend на самом деле является axes , поэтому его содержимое относительно легко изменить с помощью дескриптора.

Из версии R2014b legend является graphics object и кажется, что нет доступа к дескриптору осей (см. этот пост на недокументированном ярлыке ).

До R2014a

Учитывая легенду для двух линий в сюжете:

  • a - дескриптор легенды axex
  • b - это массив генделей:
    • b (1): дескриптор первой строки
    • b (2): дескриптор второй строки
    • b (3): дескриптор первой строки
    • b (4): дескриптор маркера первой строки
    • b (5): дескриптор второй строки
    • b (6): дескриптор маркера второй строки

    если вы хотите переместить marker в первой строке, например, в конец строки, вы можете:

    • получить XData строки (хранится в b(3) ): это массив (1x2)
    • установите XData для marker (хранится в b(4) ) до последнего значения массива, полученного на предыдущем шаге

    Если вы хотите добавить больше marker и сделать вторую строку из большего количества сегментов разных цветов, вы можете:

    • получите XData и YData строки (хранится в b(5) )
    • создайте x coord , разделив XData массив
    • отобразите сегменты в цикле for , используя YData значение в виде y coord

    Комментарии в коде должны объяснять различные шаги.

    От R2014b

    Вы можете создать легенду.

    • a является объектом matlab.graphics.illustration.Legend (попробуйте class(a) )
    • b - это массив объектов matlab.graphics.primitive.Data (попробуйте class(b) )

    По аналогии с более старыми версиями b ссылается на:

    • b (1): первая строка
    • b (2): вторая строка
    • b (3): первая строка
    • b (4): маркер первой строки
    • b (5): вторая строка
    • b (6): маркер второй строки

    Вы можете получить position и size legend через legend объект a .

    Этот подход был реализован в следующем коде (комментарии должны объяснять различные шаги).

    Читайте также: