将特定列的值映射到 R 中顶点的比例颜色

Mapping a specific column of values to the scale color of vertexs in R

现在我有一个数据框df1:

v1                v2
a                 10
b                 1
c                 3
d                 7
.......

还有另一个数据框df2

v1                v2
d                 a
c                 a
b                 c
c                 d
...

我想绘制一个基于 df2igraph 的网络:

plot(g, layout = layout_in_circle(g))

并且顶点的颜色(a,b,c,d...)应该在红色到蓝色的范围内,v2中的值越大,该顶点的颜色应该越接近红色。 我试过:

require(igraph)
g = graph.data.frame(df)
plot(g, layout = layout_in_circle(g), vertex.color = color.scale(mention_counted$V2,c(0,1,1),c(1,1,0),0))

但是顶点的颜色没有正确映射到 v2 中的值。 有没有办法做到这一点?提前致谢!

library(igraph)
library(dplyr)

# data frame to get colours
dt1 = data.frame(v1 = c("a","b","c","d"),
                 v2 = c(10, 1, 3, 7))

dt1

#   v1 v2
# 1  a 10
# 2  b  1
# 3  c  3
# 4  d  7


# create color column
dt1$color = colorRampPalette(c("blue","red"))(max(dt1$v2))[dt1$v2]

dt1

#   v1 v2   color
# 1  a 10 #FF0000
# 2  b  1 #0000FF
# 3  c  3 #3800C6
# 4  d  7 #AA0055


# data frame to get network
dt2 = data.frame(v1 = c("d","c","b","c"),
                 v2 = c("a","a","c","d"))

dt2

#   v1 v2
# 1  d  a
# 2  c  a
# 3  b  c
# 4  c  d


# build graph
g = graph.data.frame(dt2)

# check order of vertices
V(g)

# + 4/4 vertices, named:
#   [1] d c b a


# get info for vertices in the right order
dt_info =
  data.frame(names = names(V(g))) %>%
  inner_join(dt1, by = c("names"="v1"))

dt_info

#   names v2   color
# 1     d  7 #AA0055
# 2     c  3 #3800C6
# 3     b  1 #0000FF
# 4     a 10 #FF0000

# plot graph
plot(g, vertex.color = dt_info$color)