根据不同比例对图表着色节点

时间:2018-04-24 14:30:00

标签: r colors substring nodes igraph

我想将不同的数据集绘制为igraph对象。它们可以如下:

library(igraph)
m<-matrix(data = c("a1_ghj",    "a1_phj",
                   "b2_ghj",    "c1_pht",
                   "c1_ght",    "a1_ghi",
                   "g5_pht",    "d2_phj",
                   "r5_phj",    "u6_pht"), ncol = 2)
))

g<-graph_from_edgelist(m)
g

节点的颜色应该用不同的比例来指定,例如它们如下:

aa  qwr asd rty fgh vbn iop ert
ghj 1.8 -0.5    0.2 0.62    0.74    0.3 1.6
ght 2.5 -1  4.1 0.29    0.91    0.9 2
pht -3.5    3   -3.1    -0.9    0.62    -0.6    -9.2
phj -3.5    3   -1.8    -0.74   0.62    -0.7    -8.2
ghi 2.8 -2.5    4.4 1.19    0.88    0.5 3.7

在节点名称中,在_之后,显示节点所属组的名称。在比例表中,列显示比例的类型,行显示组的名称。 为了绘制这些图,我需要一个函数来标准化-1和1之间的这些比例,然后为节点指定关于表中所选比例类型的值的颜色。有人在这个问题上帮助我吗?

1 个答案:

答案 0 :(得分:0)

首先,如同The earlier question 您可以在顶点名称上使用sub来获取后缀。

Suffixes = factor(sub(".*_", "", names(V(g))))

所以问题就变成了如何使用不同的比例来选择颜色 对于节点。你要求从-1缩放到1,但实际上我已经缩放了 0到1,因为这是所生成函数所期望的参数类型 按colorRamp

您的缩放数据

RawScales = read.table(text="aa  qwr asd rty fgh vbn iop ert
ghj 1.8  -0.5    0.2   0.62    0.74    0.3     1.6
ght 2.5    -1    4.1   0.29    0.91    0.9       2
pht -3.5    3   -3.1   -0.9    0.62    -0.6   -9.2
phj -3.5    3   -1.8   -0.74   0.62    -0.7   -8.2
ghi 2.8  -2.5    4.4    1.19    0.88    0.5    3.7",
header=TRUE)

我将同时使用qwrrty比例。

在0和1之间缩放。

qwr_Scaled = (RawScales$qwr - min(RawScales$qwr)) / 
    (max(RawScales$qwr) - min(RawScales$qwr)) 

rty_Scaled = (RawScales$rty - min(RawScales$rty)) / 
    (max(RawScales$rty) - min(RawScales$rty)) 

设置一个功能来创建色阶。注意:橙色是最小值,红色是最大值。

Color = colorRamp(c("orange", "yellow", "white",  "pink", "red"))

使用此功能为节点创建颜色矢量。

ColVals_qwr = rgb(Color(qwr_Scaled), maxColorValue=255)
names(ColVals_qwr) = RawScales$aa

ColVals_rty = rgb(Color(rty_Scaled), maxColorValue=255)
names(ColVals_rty) = RawScales$aa

现在使用色标绘图。我添加了一个明确的节点布局,以便两个图可以比较。

par(mfrow=c(1,2), mar=c(5, 1,3,1))
LO = layout_with_fr(g)
plot(g, vertex.color=ColVals_qwr[Suffixes], frame=TRUE)
plot(g, vertex.color=ColVals_rty[Suffixes], frame=TRUE)

Two scalings