Matlab中的自定义图例

时间:2015-03-04 16:14:41

标签: matlab legend

这里我有一个for循环来绘制矩阵的内容。

基于'type'值,我确定了绘图对象(ks,bO,rX)

for k = 1:length(data1)
    if(type(k)==1)
       h=plot(data1(k,1),data1(k,2),'ks');set(h,'linewidth',2);hold on;
    elseif(type(k) ==0)
            h=plot(data1(k,1),data1(k,2),'bO');set(h,'linewidth',2); hold on;
    else
            h=plot(data1(k,1),data1(k,2),'rX');set(h,'linewidth',2); hold on;
    end
end

我有点困惑,想找到一种方法将传奇放在我的最终图中,这显示了我自己对每个对象的解释(ks,bO,rX)。

1 个答案:

答案 0 :(得分:3)

默认情况下,MATLAB将看到此循环的输出不是三个图,而是多个单独的绘图点。尽管某些点是使用相同的设置绘制的,但它并不会自动将它们识别为同一系列的一部分。如果你给它三个图例条目,它会将它们分配给绘制的前三个点。

最简单的方法是更改​​绘制和使用逻辑索引的方式,而不是循环:

h=plot(data1(type==1,1),data1(type==1,2),'ks'); set(h,'linewidth',2); 
hold on;
h=plot(data1(type==0,1),data1(type==0,2),'bO'); set(h,'linewidth',2);
h=plot(data1(type==-1,1),data1(type==-1,2),'rX'); set(h,'linewidth',2);

现在我们只有三个图,所以给三个图legend应该给我们这些图(按照它们被绘制的顺序)和我们的标签之间的正确匹配:

legend({'Type 1'; 'Type 0' ; 'Type -1'})