MATLAB绘图中如何设置图例中线的颜色?

4
我正在使用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不会自动循环使用颜色,正如您所希望的那样。)

是否有一种方法可以设置在图例中使用的线条颜色?

2个回答

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'})

screenshot


2

图例会选择线条颜色、样式、标记等。

每个plotgauss2d plot中必须至少有三个plot。因此,您的legend命令将应用于前三个plot,这些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'});

现在您正在导致legendlegend应用于每个plotgauss2d调用中的一个plot
另外,我建议在结尾处添加一行:
axis equal;

我认为你会喜欢它的功能。


@tmpearce,我认为这是因为他使用“set”命令成功地设置了那些线条的颜色。 - mwengler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接