我正在使用plotsomhits()函数绘制20 x 20 SOM的图形。用白色文本(该神经元中输入向量的数量)自动生成一个图,该图覆盖在网格顶部的蓝色补丁(补丁的大小对应于该神经元中观测值/输入向量的数目)上,并带有网格白色背景(代表神经元)。对于具有少量观察值/输入向量的细胞/神经元,白色文本会融合到白色细胞背景中,并且不可读。我找到了一种使用图形GUI手动逐个更改每个“补丁”的方法(View => Property Editor => 分别单击每个单元格),但为此我必须做400次特定情节。有一个更好的方法吗?有没有办法将所有补丁中的所有文本都更改为黑色,以使数字可读?谢谢!
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');
答案 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');
您应该得到类似于以下内容的情节:
如果您还想更改六角形补丁对象的颜色(蓝色前景或白色背景),则可以获取所有补丁对象手柄的矢量,选择前半部分(前景补丁)或最后一半(背景色),然后将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