在MATLAB中更改SOM补丁面和文本的颜色

时间:2018-07-11 15:49:05

标签: matlab text colors matlab-figure som

我正在使用plotsomhits()函数绘制20 x 20 SOM的图形。用白色文本(该神经元中输入向量的数量)自动生成一个图,该图覆盖在网格顶部的蓝色补丁(补丁的大小对应于该神经元中观测值/输入向量的数目)上,并带有网格白色背景(代表神经元)。对于具有少量观察值/输入向量的细胞/神经元,白色文本会融合到白色细胞背景中,并且不可读。我找到了一种使用图形GUI手动逐个更改每个“补丁”的方法(View => Property Editor => 分别单击每个单元格),但为此我必须做400次特定情节。有一个更好的方法吗?有没有办法将所有补丁中的所有文本都更改为黑色,以使数字可读?谢谢!

Picture_of_my_SOM.PNG

input1=randi([0 1], 50000, true);
input2=randi([0 1], 50000, true);
input3=randi([0 1], 50000, true);
input4=randi([0 100], 50000, true);
fakedata = [input1, input2, input3, input4];
D = 20;
dimensions = [D D];
coverSteps = 30;
initNeighbor = 3;
topologyFcn = 'gridtop';
distanceFcn = 'linkdist';
net1 = selforgmap(dimensions, coverSteps, initNeighbor, topologyFcn,distanceFcn);
net1 = train(net1, fakedata');

1 个答案:

答案 0 :(得分:1)

您可以通过获取所有child objects of the current axes,使用findobj仅选择文本对象并像这样设置所有颜色来实现此目的:

set(findobj(get(gca, 'Children'), 'Type', 'Text'), 'Color', 'k');

下面是一个使用Fisher Iris数据集的示例:

x = iris_dataset;
net = selforgmap([5 5]);
net = train(net, x);
plotsomhits(net, x);
set(findobj(get(gca, 'Children'), 'Type', 'Text'), 'Color', 'k');

您应该得到类似于以下内容的情节:

enter image description here

如果您还想更改六角形补丁对象的颜色(蓝色前景或白色背景),则可以获取所有补丁对象手柄的矢量,选择前半部分(前景补丁)或最后一半(背景色),然后将FaceColor property设置为给定的颜色值:

patches = findobj(get(gca, 'Children'), 'Type', 'Patch');  % All the patch objects
set(patches(1:25), 'FaceColor', 'r');   % Make foreground patches red
set(patches(26:50), 'FaceColor', 'c');  % Make background patches cyan