在 Matlab 中自定义图例

Customized Legend in Matlab

这里我有一个 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) 的解释。

默认情况下,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'})