为散点图创建图例(Matlab)

4

我有一个包含点的矩阵X,它在3个维度上(X是一个Nx3的矩阵),并且这些点属于不同的聚类。每个点所属的聚类由Nx1向量Cluster决定(它的值可以是1、2、3等)。因此,我使用scatter3将它们绘制成散点图,如下所示:

scatter3(X(:,1),X(:,2),X(:,3),15,Cluster)

它的功能很好,但我想添加一个图例,显示彩色标记和它所代表的聚类。

例如,如果我有3个聚类,我想要一个像这样的图例:

<blue o> - Cluster 1
<red o> - Cluster 2
<yellow o> - Cluster 3

非常感谢您的帮助!

你是特指 RGB 平面吗?还是只想给聚类打标签? - bonCodigo
@bonCodigo 我只想给它们贴上标签。 - DanielX2010
2个回答

3

建议您使用plot3而不是scatter3,这将使标注更加简单:

%# find out how many clusters you have
uClusters = unique(Cluster);
nClusters = length(uClusters);

%# create colormap
%# distinguishable_colormap from the File Exchange 
%# is great for distinguishing groups instead of hsv
cmap = hsv(nClusters);

%# plot, set DisplayName so that the legend shows the right label
figure,hold on
for iCluster = 1:nClusters
    clustIdx = Cluster==uClusters(iCluster);
    plot3(X(clustIdx,1),X(clustIdx,2),X(clustIdx,3),'o','MarkerSize',15,...
       'DisplayName',sprintf('Cluster %i',uClusters(iCluster)));
end

legend('show');

1

你可以使用

  • legend

代码:

h = scatter3(X(:,1),X(:,2),X(:,3),15,Cluster)
hstruct = get(h);
legend(hstruct.Children, "Cluster1", "Cluster2", "Cluter3");

或者


是的,当然,但我应该使用什么作为图例的参数呢?我放在图例内的第一个参数很好用(legend('cluster1'))。它显示了正确的图例和第一个标记,但只适用于第一个。它不能适用于所有标记。 - DanielX2010
@DanielX2010,请尝试以下更新并告诉我们进展如何。 - bonCodigo
我也尝试过那个,但结果很奇怪。他发出警告,说“警告:忽略额外的图例条目。”,结果是一个奇怪的图例(上传结果在这里:http://s1.postimage.org/l9k7xm9xb/untitled.png)。 - DanielX2010
@Daniel,图片太小了,无法正确查看。你试过Jonas的方法吗?另一种方法是明确命名每个集群... - bonCodigo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接