在MATLAB中,我有一个图,我想用它的节点根据它们的中心度来着色。下面是我目前绘制图表的方式:
sdc = centrality(G, 'degree');
V = plot(G);
for i=1:size(genes,1)
highlight(V, [i], 'NodeColor', 'g');
end
当然,这只会使所有节点变为绿色。我想做的是根据sdc的相应值平滑地设置节点颜色,这样值低的节点更蓝,值适中的节点更绿-黄,值高的节点更红。有没有办法做到这一点?
发布于 2021-11-07 14:42:08
首先,定义color map或使用现有的an。例如,名为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)])), :);
第二行的解释如下:
size
函数[1,255]
)normalize
)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
https://stackoverflow.com/questions/69876692
复制