更改 scale_colour_manual 上的环境大小以将颜色分配给要在多个图中使用的因素

change environment size on scale_colour_manual to assign colour to factors to use across multiples plots

我需要绘制 5 个细菌种类图。每个地块都有不同数量的物种,范围为 30-90。我希望每个细菌在所有图中始终具有相同的颜色,因此我需要为每个名称设置指定的颜色。 我尝试使用 scale_colour_manual 创建颜色集,但是创建的环境只有 16 种颜色。如何增加所创建环境中的颜色数量?

我使用的代码可以复制如下:

colour_genus <- stringi::stri_rand_strings(90, 5) #to be random names

nb.cols = nrow(colour_genus) #to set the length of my string
MyPalette = colorRampPalette(brewer.pal(12,"Set1"))(nb.cols) # the palette of choice
colGenus <- scale_color_manual(name = colour_genus, values = MyPalette)

形成的输出仅包含 16 个值,因此当我尝试将其应用于具有 90 个因子的图形时,它抱怨我只有 16 个值

abundance <- runif(90, min = 10, max = 100)
my_data <- data.frame(colour_genus, abundance)

p <- ggplot(my_data, aes(x = colour_genus, y= abundance)) +
  geom_bar(aes(color = colour_genus, fill = colour_genus), stat = "identity", position = "stack") +
  labs(x = "", y = "Relative Abundance\n") +
  theme(panel.background = element_blank())
p + theme(legend.text= element_text(size=7, face="bold"), axis.text.x = element_text(angle = 90)) + guides(fill=guide_legend(ncol=2)) + scale_fill_manual(values=colGenus)

显示如下错误: 错误:手动刻度中的值不足。需要 90 个,但只提供了 16 个。

非常感谢您的帮助。

当你在plotting前知道你所有的90个杆菌名字,你就可以试试了。

set.seed(123)
colour_genus <- sort(stringi::stri_rand_strings(90, 5))#to be random names. I sorted the vector to illustrate the output better (optional). 
MyPalette <- sample(colors(), length(colour_genus))
# named vector for scale_fill
names(MyPalette) <- colour_genus

# data
abundance <- runif(90, min = 10, max = 100)
my_data <- data.frame(colour_genus, abundance)

# two sets to show results
set1 <- my_data[20:30,]
set2 <- my_data[25:35,]
ggplot(set1, aes(x = colour_genus, y= abundance)) +
  geom_col(aes(fill = colour_genus)) +
  scale_fill_manual(values = MyPalette)

ggplot(set2, aes(x = colour_genus, y= abundance)) +
  geom_col(aes(fill = colour_genus)) +
  scale_fill_manual(values = MyPalette)