在 gscatter 中获得更合理颜色的简单方法

Simple way to get more sensible colors in gscatter

我正在寻找一种让 gscatter 选择更合理的颜色的简单方法。

如下图所示,第3组和第4组的颜色非常相似,很难区分。

我正在使用 gscatter(X(:,1),X(:,4),assigns , [], [] ) 绘制我的数据。

我知道我可以使用 scatter 通过创建颜色图来手动获得更合理的颜色,该颜色图的颜色数量与我拥有的组数相同,但是我如何获得像这样的漂亮图例gscatter 生成而不循环遍历每个组?

那么,有没有一种简单的方法可以通过 gscatter 获得更合理的颜色?

谢谢。

这是一种权衡,您可以在其中使用 gscatter 及其出色的图例功能,但如果需要,您需要遍历每个组以手动设置颜色。

诀窍是在调用 gscatter 期间分配一个输出,然后更改 Color 属性。你当然可以改变任何你想要的属性。

在这个简单的示例中,我为每个组生成了随机颜色,但您可以轻松访问包含您需要的颜色的自定义颜色图的条目。:

clear
clc
close all

load discrim

%// Just creating 2 more groups for the demo.
group(1:3:end) = 3;
group(2:2:end) = 4;

figure;

%// Retrieve handles of the scatter plot
hScatter = gscatter(ratings(:,1),ratings(:,2),group);

%// Set colors manually. You can use your own colormap.
for k = 1:numel(hScatter)
set(hScatter(k),'Color',rand(1,3))
end

xlabel('climate');
ylabel('housing');

输出:

gscatter的第四个参数是颜色规范。根据documentation,只能用字母来定义颜色:

gscatter(x,y,group,clr,sym,siz) specifies the color, marker type, and size for each group. clr is a string array of colors recognized by the plot function. The default for clr is 'bgrcmyk'.

但是如果你输入 open gscatter 并查看第一行的注释(Matlab 的 ),惊喜!

GSCATTER(X,Y,G,CLR,SYM,SIZ) specifies the colors, markers, and
size to use. CLR is either a string of color specifications or
a three-column matrix of color specifications
.

因此您可以使用颜色图矩阵来定义您想要的颜色(至少在 Matlab R2014b 中是这样)。

示例:

load discrim
group(1:3:end) = 3; %// borrowing Benoit_11's idea to create two more groups
group(2:2:end) = 4;
cmap = hsv(4); %// define your colormap here
gscatter(ratings(:,1), ratings(:,2), group, cmap)


编辑:在较新的 Matlab 版本中(我检查了 R2019a)文档确实提到了将颜色指定为三列矩阵的可能性:

clr: Marker colors: character vector or string scalar of colors | matrix of RGB triplet values.