我想绘制两种颜色的四个圆圈。我使用圆圈功能绘制圆圈。我遇到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
下图显示了问题。两者都是蓝色,而其中一个是红色。
有什么建议吗?
答案 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
结果如下所示:
答案 1 :(得分:1)
问题是你画了4件事,在图例中只有2个条目。 因此,它会选择前四个颜色来为图例着色。
现在没有机会亲自尝试,但我想最简单的“解决方案”是首先绘制第三个圆圈,然后绘制第二个圆圈。
circle([ 10, 0], 3, 'b')
circle([ 10, 10], 3, 'r')
circle([-10, 0], 3, 'b')
circle([-10, 10], 3, 'r')