Задать цвета линий в легенде о сюжете MATLAB?

Я использую функцию plotgauss2d BNT, чтобы визуализировать, как изменяется отклик двумерного гауссовского узла, когда свидетельство наблюдается в другом месте сети.

eng = jtree_inf_engine(bnet);
evidence = cell(1, 2)
eng = enter_evidence(eng, evidence);
marginals = marginal_nodes(eng, 1); p_1 = marginals.T
marginals = marginal_nodes(eng, 2); p_2 = marginals.T
marginals
clf; plotgauss2d(marginals.mu, marginals.Sigma);
hold all;
evidence{1} = 1;
marginals = marginal_nodes(enter_evidence(eng, evidence), 2);
p = plotgauss2d(marginals.mu, marginals.Sigma);
set(p, 'Color', 'green');
evidence{1} = 2;
marginals = marginal_nodes(enter_evidence(eng, evidence), 2);
p = plotgauss2d(marginals.mu, marginals.Sigma);
set(p, 'Color', 'red');
legend({'Unknown', 'Class 1', 'Class 2'});
hold off;

enter image description here

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

Есть ли способ установить цвета линий, используемые в легенде?

Ответы на вопрос(2)

Решение Вопроса

PLOTGAUSS2D Функция возвращает вектор из трех маркеров, соответствующих малой оси, большой оси и эллипсу соответственно. Итак, вот пример, как хранить дескрипторы и вызывать LEGEND в конце:

h = zeros(3,3);
h(:,1) = plotgauss2d(rand(2,1), [1 0.5; 0.5 2]);
h(:,2) = plotgauss2d(rand(2,1), [2 -0.5; -0.5 1]);
h(:,3) = plotgauss2d(rand(2,1), [1 0; 0 2]);
hold off
set(h(:,1), 'Color','r')
set(h(:,2), 'Color','g')
set(h(:,3), 'Color','c')
legend(h(1,:), {'1','2','3'})

screenshot

Вы должны иметь как минимум триplotв каждомplotgauss2d plot, Таким образом, вашlegend Команда применяетlegend к первым тремplots, все с первого звонкаplotgauss2d.

Пропустив часть кода, вы можете сделать свою легенду правильной, выполнив это:

p = plotgauss2d(marginals.mu, marginals.Sigma);
h = p(1);
hold all;
evidence{1} = 1;
marginals = marginal_nodes(enter_evidence(eng, evidence), 2);
p = plotgauss2d(marginals.mu, marginals.Sigma);
h(end+1) = p(1);
set(p, 'Color', 'green');
evidence{1} = 2;
marginals = marginal_nodes(enter_evidence(eng, evidence), 2);
p = plotgauss2d(marginals.mu, marginals.Sigma);
h(end+1) = p(1);
set(p, 'Color', 'red');
legend(h,{'Unknown', 'Class 1', 'Class 2'});

Теперь вы вызываетеlegend применитьlegend к одномуplot от каждого из вашихplotgauss2d звонки.

Кроме того, я бы предложил добавить строку в конце:

axis equal;

Я думаю, вам понравится то, что он делает.

Ваш ответ на вопрос