Как сделать легенду в матлабе
Пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него, называется легендой. Для создания легенды используются различные варианты команды 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 .
Этот подход был реализован в следующем коде (комментарии должны объяснять различные шаги).
Читайте также: