根据 R 中另一个列表中的唯一条目生成颜色
Generate colors based on unique entries in another list in R
我想使用调色板为 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
用唯一的 E(g)$fruit
命名你的 colrs
向量:
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)
我需要类似的代码,但我需要更大的颜色托盘("Accent" 中提供的颜色多于 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)
我想使用调色板为 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
用唯一的 E(g)$fruit
命名你的 colrs
向量:
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)
我需要类似的代码,但我需要更大的颜色托盘("Accent" 中提供的颜色多于 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)