在MATLAB中,如何在散点图中使用带颜色图例(colormap)?

4
在MATLAB中,我如何在散点图中使用带有色图的图例?例如:
colormap winter
xData = [1 2 3 4 5];
yData = [7 4 2 8 1];
col = [1 1 2 2 1];
h1 = scatter(xData, yData, 50, col,'s');
legend('one','two')

很明显这个图例是错误的,因为它只显示了'one'。我知道我可以通过col分割数据并绘制两个散点图,但在使用彩色映射时有一种简单的方法可以制作图例吗?


尝试使用gscatter而不是scatter - Daniel
谢谢@Daniel,但我认为gscatter不适用于这种类型的数据?即每行X必须有一个G值。 - user2861089
“legend” 为每个数据集添加一个标签。在您的代码中,虽然您通过 “color” 对数据进行了“分割”,但只有一个数据集。 - Yvon
2个回答

4
这是我使用gscatter绘制数据的方法:
gscatter(xData,yData,col)
legend('one','two')

显然,gscatter 的输出在视觉上与 scatter 不完全相同,但如果您想按 col 分组您的点,则gscatter 似乎是正确的选择。


1
作为一种替代方案,保留scatter()风格,我建议使用循环中的scatter,每个组调用一次。因此,我们创建将要使用的colormap,并手动分配颜色:
xData = [1 2 3 4 5];
yData = [7 4 2 8 1];
col = [1 1 2 2 1];
groups = unique(col);
nGroups = length(groups);
cmap = colormap(winter(nGroups));
figure
hold on
for iGroup = 1:nGroups
    group = groups(iGroup);
    idx = col==group;
    scatter(xData(idx), yData(idx), 50, cmap(iGroup,:),'s');
end
legend('one','two')

1
这个解决方案会打乱散点的随机顺序,并将最后一个颜色放在其他颜色的顶部。 - codekitty

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