【问题标题】:change color of SOM patch faces and text in MATLAB在 MATLAB 中更改 SOM 补丁面和文本的颜色
【发布时间】:2023-03-30 02:25:01
【问题描述】:

我正在使用 plotsomhits() 函数绘制一个 20 x 20 SOM。使用白色文本(该神经元中的输入向量的数量)自动生成一个图,覆盖在网格顶部的蓝色补丁(其中补丁的大小对应于该神经元中的观察/输入向量的数量)上白色背景(代表神经元)。对于具有少量观察/输入向量的细胞/神经元,白色文本混合到白色细胞背景中并且不可读。我找到了一种使用图形 GUI 手动更改每个“补丁”的方法(查看=>属性编辑器=>单独单击每个单元格),但为此我必须这样做 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');

【问题讨论】:

    标签: matlab text colors matlab-figure som


    【解决方案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
    

    【讨论】:

    • 非常感谢!有没有办法改变补丁面的颜色?它没有显示它具有任何要更改的颜色属性。再次感谢您!
    • @Jane:我在最后添加了一点说明如何修改补丁对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多