Matlab 中的定制图例

Ha *_*ker 2 matlab legend

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

根据“类型”值,我确定绘图对象(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
Run Code Online (Sandbox Code Playgroud)

我有点困惑如何找到一种将图例放入最终图形中的方法,该图形显示了我自己对每个对象(ks,bO,rX)的解释。

nkj*_*kjt 5

默认情况下,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);
Run Code Online (Sandbox Code Playgroud)

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

legend({'Type 1'; 'Type 0' ; 'Type -1'})
Run Code Online (Sandbox Code Playgroud)