В R ggplot2: как назначить цвета в scale_fill_manual множителю?

#r #ggplot2

#r #ggplot2

Вопрос:

У меня есть образец набора данных, который я хочу отобразить в ggplot, присвоив с помощью scale_fill_manual индивидуальный цвет для каждого фактора в группе переменных. Однако индивидуальное назначение не работает должным образом, поскольку вы можете видеть, что факторы a и b не получают другого цвета. Вот мой код и результирующий график.

 #data
trt<-c("trt1","trt2","trt3","trt4","trt5","trt6","trt7")
emmean<-c(7.75,7.5,5.75,7,6,8,4)
group<-c("c","c","b","bc","b","c","a")

#specify color vector to get as many colors as group levels
library(RColorBrewer)
color_pallete_function <- colorRampPalette(
  colors = brewer.pal(8,"Dark2"),
  space = "Lab")

dat<-data.frame(trt,emmean,group)

dat$group<-as.factor(dat$group)
num_colors <- nlevels(dat$group)
diamond_color_colors <- color_pallete_function(num_colors)

#letter display plot
ggplot(data=dat, aes(x=reorder(trt,emmean),y=emmean,fill=group))  
  geom_bar( stat="identity", width=0.8)  
  scale_fill_manual(values =diamond_color_colors[dat$group]) 
  #geom_errorbar(aes(ymin=lower.CL, ymax=upper.CL), width=0.4)  
  geom_text(aes(y=8, label=group, angle=90))  
  theme(legend.position = "none",
        axis.text.x = element_text(angle = 45,hjust=1))   
  annotate(geom="label", y=1, x=length(rownames(dat))-1, size=3, color="black", fill="white",
           label="Means with the same letter are accordingn  to Tukey test (alpha=5%) not significantly different.")
 
  

введите описание изображения здесь

Как это можно решить?

Комментарии:

1. Error in color_pallete_function(num_colors) : could not find function "color_pallete_function"

2. извините, я только что добавил библиотеку RColorBrewer

Ответ №1:

Чтобы назначить цвета категориям надежным способом, назовите свой цветовой вектор и используйте этот именованный цветовой вектор внутри scale_fill_manual . Попробуйте это:

 library(ggplot2)
library(RColorBrewer)

trt<-c("trt1","trt2","trt3","trt4","trt5","trt6","trt7")
emmean<-c(7.75,7.5,5.75,7,6,8,4)
group<-c("c","c","b","bc","b","c","a")

#specify color vector to get as many colors as group levels
color_pallete_function <- colorRampPalette(
  colors = brewer.pal(8,"Dark2"),
  space = "Lab")

dat<-data.frame(trt,emmean,group)

dat$group<-as.factor(dat$group)
num_colors <- nlevels(dat$group)
diamond_color_colors <- color_pallete_function(num_colors)
# Name your color vector
diamond_color_colors <-setNames(diamond_color_colors, levels(dat$group))

#letter display plot
ggplot(data=dat, aes(x=reorder(trt,emmean),y=emmean,fill=group))  
  geom_bar( stat="identity", width=0.8)  
  scale_fill_manual(values = diamond_color_colors) 
  geom_text(aes(y=8, label=group, angle=90))  
  theme(legend.position = "none",
        axis.text.x = element_text(angle = 45,hjust=1))   
  annotate(geom="label", y=1, x=length(rownames(dat))-1, size=3, color="black", fill="white",
           label="Means with the same letter are accordingn  to Tukey test (alpha=5%) not significantly different.")