我正在使用BNT的plotgauss2d函数来可视化当在网络的其他地方观察到证据时2D高斯节点的响应如何变化。
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;
正如您所看到的,图例没有拾取我必须手动设置的更改的绘图颜色。 (可悲的是,plotgauss2d并不像你希望的那样自动循环显示颜色。)
有没有办法设置图例中使用的线条颜色?
答案 0 :(得分:7)
PLOTGAUSS2D函数返回分别对应于短轴,长轴和椭圆的三个手柄的矢量。所以这里是一个如何存储句柄并在最后调用LEGEND的例子:
figure, hold on
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'})
答案 1 :(得分:2)
Legend确实会选择线条颜色,样式,标记等。
每个plot
必须至少有三plotgauss2d plot
个。因此,legend
命令将legend
应用于前三个plot
,所有这些都是从第一次调用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;
。
另外,我建议最后添加一行:
{{1}}
我想你会喜欢它的作用。