我想使用调色板为 igraph 中的图形边缘定义颜色。我使用RColorBrewer
创建了调色板,需要根据边缘属性信息为每条边分配一种独特的颜色。
到目前为止,这是我的尝试:
colrs<- brewer.pal(length(unique(E(g)$fruit)), "Accent")
E(g)$color <- colrs[E(g)$fruit] #Does not work
E(g)$color
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[40] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[79] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
我可以使用E(g)$fruit
作为colrs
列表的索引吗?
E(g)$fruit
中有4种水果:
unique(E(g)$fruit)
"Apple" "Orange" "Grapes" "Pear"
因此,根据每个边缘的 fruit 的类型,它应该从colrs
列表中获取相应的颜色,使得“Apple”的所有边具有相同的颜色,所有边缘“Orange”具有相同的颜色,依此类推。我最终将使用以下代码绘制图形:
plot(g,layout=layout.fruchterman.reingold, vertex.color='grey80', vertex.label.color="black", edge.color=E(g)$color)
以下是我的图表边缘列表的示例:
from to fruit
1 A B Apple
2 A C Apple
3 B C Grapes
4 D B Pear
5 D C Orange
答案 0 :(得分:2)
使用唯一的colrs
:
E(g)$fruit
向量命名
df <- read.table(header=T, text="
from to fruit
1 A B Apple
2 A C Apple
3 B C Grapes
4 D B Pear
5 D C Orange")
library(igraph)
library(RColorBrewer)
g <- graph_from_data_frame(df)
colrs<- brewer.pal(length(unique(E(g)$fruit)), "Accent")
names(colrs) <- unique(E(g)$fruit)
E(g)$color <- colrs[E(g)$fruit] #Does not work
E(g)$color
# [1] "#7FC97F" "#7FC97F" "#BEAED4" "#FDC086" "#FFFF99"
plot(g,layout=layout.fruchterman.reingold, vertex.color='grey80', vertex.label.color="black", edge.color=E(g)$color)
答案 1 :(得分:0)
我需要类似的代码,但我需要一个更大的颜色托盘(在&#34; Accent&#34;中提供8个以上),我们可以使用colorRampPalette
函数。这样我们就可以根据需要的颜色创建自己的调色板。
colourCount = length(unique(g$fruit))
getPalette = colorRampPalette(brewer.pal(9, "Set1"))
colrs<- getPalette(colourCount)
names(colrs) <- unique(E(g)$fruit)
E(g)$color <- colrs[E(g)$fruit]
E(g)$color
plot(g,layout=layout.fruchterman.reingold, vertex.color='grey80', vertex.label.color="black", edge.color=E(g)$color)