Matlab图中的图例

时间:2014-05-14 23:38:10

标签: matlab

我需要生成X对Y图并区分正类和负类(在原始数据infile中表示)。如何在这样的图表中生成图例?这是我现在的图表代码:

infile = fopen('ClassData1.txt','r');
data = textscan(infile,'%f %f %f');
parameters = [data{1} data{2}];
label = [data{3}];
h = ones(100,9);
g = ones(100,9);
score1= ones(1,9);
sc = 0;
figure
for i = 1:100
        if label(i)>0
            plot(parameters(i,1),parameters(i,2),'r*')
            hold on 
        else
            plot(parameters(i,1),parameters(i,2),'b*')
        end
end

2 个答案:

答案 0 :(得分:1)

有(超过两种)方法可以做到这一点。首先,您可以使用单个plot命令并通过使用逻辑索引组合绘图定义来正常执行图例,或者您可以使用每个绘图的DisplayName属性来提供有关图例的信息。

% Some sample data
parameters=rand(100,2);
label=parameters(:,1)-0.5;

% Use logical indexing to replace the for loop and use a single plot command
figure(1)
plot(parameters(label>0,1),parameters(label>0,2),'r*',parameters(label<=0,1),parameters(label<=0,2),'b*')
legend('red','blue')

% Use DisplayName to set the legend entry for each plot, then show the legend using the names given
figure(2)
plot(parameters(label>0,1),parameters(label>0,2),'r*','DisplayName','Red')
hold on
plot(parameters(label<=0,1),parameters(label<=0,2),'b*','DisplayName','Blue')
hold off
legend('show')

答案 1 :(得分:1)

要仅显示每个线型一次,您必须保留手柄。每个类只存储一个句柄就足够了。

h=nan(2,1)
for i = 1:100
    if label(i)>0
        h(1)=plot(parameters(i,1),parameters(i,2),'r*')
        hold on 
    else
        h(2)=plot(parameters(i,1),parameters(i,2),'b*')
    end
end
legend(h)