在 MATLAB 中更改 SOM 贴片面和文本的颜色

change color of SOM patch faces and text in MATLAB

我正在使用 plotsomhits() 函数绘制 20 x 20 SOM 的图形。自动生成一个带有白色文本(该神经元中输入向量的数量)的图,覆盖在带有白色背景(代表神经元)。对于具有少量 observations/input 矢量的 cells/neurons,白色文本混合到白色单元格背景中并且不可读。我找到了一种使用图形 GUI 逐个手动更改每个 "patch" 的方法(View=>属性 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');

您可以通过获取所有 child objects of the current axes, selecting only the text objects using 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');

你应该得到类似这样的情节:

如果您还想更改六边形补片对象的颜色(蓝色前景或白色背景),您可以获得所有补片对象句柄的矢量,select 第一个一半(前景补丁)或后一半(背景补丁),并将 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