如何在Matlab图中修改图例?

时间:2014-09-19 11:49:55

标签: matlab plot legend

我想绘制两种颜色的四个圆圈。我使用圆圈功能绘制圆圈。我遇到legend()的问题。它用相同的颜色为两个数据着色。

function main
clear all
clc

circle([ 10,  0], 3, 'b')
circle([-10,  0], 3, 'b')
circle([ 10, 10], 3, 'r')
circle([-10, 10], 3, 'r')

    % Nested function to draw a circle
    function circle(center,radius, color)
     axis([-20, 20, -20 20])
     hold on;
     angle = 0:0.1:2*pi;

     grid on

     x = center(1) + radius*cos(angle);
     y = center(2) + radius*sin(angle);
     plot(x,y, color, 'LineWidth', 2);
     xlabel('x-axis');
     ylabel('y-axis');
     title('Est vs Tr')
     legend('true','estimated');
    end


end

下图显示了问题。两者都是蓝色,而其中一个是红色。

enter image description here

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

你可以让你的函数circle()返回绘图句柄。将手柄存放在矢量中。最后,在绘制所有圈子后,您只需拨打legend()一次。图例中的第一个参数是要在图例中显示的函数句柄。像这样:

function main
% clear all % functions have their own workspace, this should always be empty anyway
clc
handles = NaN(1,2);
handles(1,1) = circle([ 10,  0], 3, 'b'); % handle of a blue circle
circle([-10,  0], 3, 'b')
handles(1,2) = circle([ 10, 10], 3, 'r'); % handle of a red circle
circle([-10, 10], 3, 'r')

    % Nested function to draw a circle
    function h = circle(center,radius, color) % now returns plot handle
     axis([-20, 20, -20 20])
     hold on;
     angle = 0:0.1:2*pi;
     grid on
     x = center(1) + radius*cos(angle);
     y = center(2) + radius*sin(angle);
     h = plot(x,y, color, 'LineWidth', 2);
     xlabel('x-axis');
     ylabel('y-axis');
     title('Est vs Tr')
    end

% legend outside of the function
legend(handles, 'true','estimated'); % legend for a blue and a red circle handle
end

结果如下所示:enter image description here

答案 1 :(得分:1)

问题是你画了4件事,在图例中只有2个条目。 因此,它会选择前四个颜色来为图例着色。

现在没有机会亲自尝试,但我想最简单的“解决方案”是首先绘制第三个圆圈,然后绘制第二个圆圈。

circle([ 10,  0], 3, 'b')
circle([ 10, 10], 3, 'r')
circle([-10,  0], 3, 'b')
circle([-10, 10], 3, 'r')