Вопрос по matlab – Построение графика MATLAB: назначение меток легенды во время построения

10

Я строю данные в типичном формате диаграммы рассеяния MATLAB. Обычно при построении нескольких наборов данных я использовал команду «Hold on;», а затем наносил на график все данные, после чего получал легенду:

legend('DataSet1', 'DataSet2') % etcetera

Однако, (несколько) наборов данных, которые я строю на одних и тех же осях, не обязательно являются одинаковыми наборами данных каждый раз. Я отображаю до шести различных наборов данных на одних и тех же осях, и они могут отображаться в любой комбинации (в зависимости от того, что пользователь выбирает для отображения). Очевидно, было бы много других, если бы я хотел установить легенду традиционным способом.

Что я действительно хотел бы сделать, так это назначить каждому DataSet имя как это заговор чтобы потом я мог вызвать легенду обо всех отображаемых данных.

... Или любое другое решение этой проблемы, о котором каждый может подумать? ..

Ваш Ответ

5   ответов
11

Один из вариантов - воспользоваться'UserData' свойство так:

figure;
hold on
plot([0 1], [1 0], '-b', 'userdata', 'blue line')
plot([1 0], [1 0], '--r', 'userdata', 'red dashes')

% legend(get(get(gca, 'children'), 'userdata'))                      % wrong
legend(get(gca, 'children'), get(get(gca, 'children'), 'userdata'))  % correct

Редактировать: Как указывал спрашивающий, оригинальная версия может выйти из строя. Чтобы это исправить, укажите, какой дескриптор идет с какой меткой (в фиксированной версии - в правильном порядке).

Похоже, этот метод смешивает цвета и имена ... Разве я неправильно его реализую? CaptainProg
Это действительно хорошее решение! H.Muster
Что ты имеешь в виду, точно ... Ах, понятно. Хорошо, попробуйте новую версию! tmpearce
Фантастика. Спасибо CaptainProg
19

о графика:

figure
hold on
plot(...,'DisplayName','DataSet1')
plot(...,'DisplayName','DataSet2')
legend(gca,'show')

http: //www.mathworks.com/help/matlab/ref/line_props.htm

римечание @Side: я нашел много маленьких трюков, таких как этот, заставив рисунок выглядеть так, как я хочу, затем выбрав пункт меню «Файл» в меню «Создать M-файл ...» и проверив сгенерированный выходной код .

хорошая заметка! samad montazeri
10

Используйте'DisplayName' какplot() собственности, и назовите вашу легенду как

legend('-DynamicLegend');

Мой код выглядит так:

x = 0:h:xmax;                                  %// get an array of x-values
y = someFunction;                              %// function
plot(x, y, 'DisplayName', 'Function plot 1');  %// plot with 'DisplayName' property

legend('-DynamicLegend',2);                    %// '-DynamicLegend' legend

Источник:http: //undocumentedmatlab.com/blog/legend-semi-documented-feature

Это или ответ Джонатана должны быть приняты! Ela782
3

Ты можешь попробовать что-то вроде следующего

for k = 1:10

   h(k) = plot(...);
   name{k} = ['condition ' num2str(k)];

end

legend(h, name);
Это тоже работает. CaptainProg
0

Сделайте цикл. Но перед циклом for создайте массив.

%for example 

legendset = {}

for i = 1:10 

%blabla
%Then in the fore loop say: 

legendset = [legendset;namedata(i)]

%It puts all names in a column of legendset. 
%Make sure namedata are characters. 

%foreloop ends
end

%Then after the foreloop say: 

legend(legendset). 

Похожие вопросы