【问题标题】:MATLAB graph plot - coloring nodes smoothly by centralityMATLAB图表 - 通过中心性平滑着色节点
【发布时间】:2021-11-07 21:34:50
【问题描述】:

在 MATLAB 中,我有一个图表,我想绘制它的节点,根据它们的中心性度量对其进行着色。这是我目前绘制图表的方式:

sdc = centrality(G, 'degree');
V = plot(G);
for i=1:size(genes,1)
    highlight(V, [i], 'NodeColor', 'g');
end

当然,这只是将所有节点变为绿色。我要做的是根据sdc对应的值平滑地设置节点颜色,使值低的节点更蓝,值中等的节点绿黄色,值高的节点更红。有没有办法做到这一点?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    首先,定义color map 或使用现有的。例如。名为turbo 的那个与所描述的非常相似。

    highlight 函数中,可以通过在'NodeColor' 参数后提供一个RGB 三元组来设置节点的颜色。例如,这会将节点设置为红色:

    highlight(V, [i], 'NodeColor', [1 0 0]);

    让我们将选择的颜色图存储在一个变量中,并使用一种智能的矩阵索引方式来创建一个N×3 大小的矩阵,其中包含sdc 向量中每个数据点所需的颜色。

    cm = turbo;
    sdc_colors = cm(round(normalize(sdc, 'range', [1, size(cm, 1)])), :);
    

    第二行的解释如下:

    1. 首先,size函数返回地图中的颜色数量
    2. 创建从 1 到上述数字的范围(例如 [1,255]
    3. 输入数据经过标准化以涵盖此动态范围 (normalize)
    4. 规范化的值被四舍五入为整数以成为有效的索引值
    5. 颜色图 (cm) 使用此向量作为第一个索引,: 作为第二个参数进行索引,这会产生一个 N×3 矩阵,其中填充了每个数据点的适当颜色值。李>

    创建所需颜色的矩阵后,可以在 for 循环中使用适当的索引调用它。所以完整的代码是:

    cm = turbo;
    sdc_colors = cm(round(normalize(sdc, 'range', [1, size(cm, 1)])), :);
    
    for i=1:size(sdc,1)
        highlight(V, [i], 'NodeColor', sdc_colors(i, :));
    end
    

    【讨论】:

      猜你喜欢
      • 2019-06-22
      • 2020-02-20
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 2015-01-16
      相关资源
      最近更新 更多