Все графики ggplot серого цвета даже после добавления цвета

#r #ggplot2

Вопрос:

Я недавно обновил R и ggplot2 до версий (4.1.1 и 3.3.5 соответственно). Я использовал этот код для создания графиков в ggplot:

 rejA<-c(0.05,0.10,0.00,0.05)
Tr<-c("CornnmalenxnCornnfemale","CornnmalenxnWheatnfemale","WheatnmalenxnCornnfemale","WheatnmalenxnWheatnfemale")
Matingdiet<-c("Same diet","Different diets","Different diets", "Same diet")
d<-as.data.frame(cbind(Tr,rejA,Matingdiet))
d$rejA<-as.numeric(as.character(d$rejA))
d$Matingdiet<-factor(d$Matingdiet,levels = rev(levels(d$Matingdiet)))

mycol<-RColorBrewer::brewer.pal(9,"YlOrBr")[c(7,4)]

dev.new()

pl<-ggplot(data = d, aes(x=Tr, y=rejA)) 
  geom_col(aes( fill=Matingdiet)) 
  labs(x = "Mating pairs",fill="Male and female from", y = "Proportion of mates rejected") 
  scale_y_continuous(limits=c(0,1),expand = c(0,0))  
  scale_fill_manual(values=mycol) 
  theme_bw()   
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), 
        axis.line.y = element_line(colour = "black"),
        axis.text=element_text(size = 10),
        strip.background = element_blank(),
        axis.text.y=element_text(size = 10),
        panel.border=element_blank(),
        panel.spacing.x = unit(1,"line"),
        strip.text.x = element_text(size = 20)) 
  geom_hline(yintercept = 0)

pl
 

Однако цвета не отображаются на графике. Я использовал тот же код ранее, чтобы получить этот сюжет
Полосы имеют два разных цвета с надписью, обозначающей цвета

Однако теперь, когда я запускаю один и тот же код, все полосы становятся серыми, а легенды нет.

Я попытался изменить цвета в коде

 pl<-ggplot(data = d, aes(x=Tr, y=rejA)) 
   geom_col(aes( fill=Matingdiet)) 
   labs(x = "Mating pairs",fill="Male and female from", y = "Proportion of mates rejected") 
   scale_y_continuous(limits=c(0,1),expand = c(0,0))  
   scale_fill_manual(values=c("red","blue")) 
   theme_bw()   
   theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), 
        axis.line.y = element_line(colour = "black"),
        axis.text=element_text(size = 10),
        strip.background = element_blank(),
        axis.text.y=element_text(size = 10),
        panel.border=element_blank(),
        panel.spacing.x = unit(1,"line"),
        strip.text.x = element_text(size = 20)) 
   geom_hline(yintercept = 0)

   pl
 

Это также вернет график со всеми полосами серого цвета. Я не уверен, что попробовать сейчас, тем более, что это работало раньше (в версии 3.5 R).

Ответ №1:

Я не уверен, но в очереди

 d$Matingdiet<-factor(d$Matingdiet,levels = rev(levels(d$Matingdiet)))
 

изменение данных d с

                              Tr rejA      Matingdiet
1   CornnmalenxnCornnfemale 0.05       Same diet
2  CornnmalenxnWheatnfemale 0.10 Different diets
3  WheatnmalenxnCornnfemale 0.00 Different diets
4 WheatnmalenxnWheatnfemale 0.05       Same diet
 

Для

                              Tr rejA Matingdiet
1   CornnmalenxnCornnfemale 0.05       <NA>
2  CornnmalenxnWheatnfemale 0.10       <NA>
3  WheatnmalenxnCornnfemale 0.00       <NA>
4 WheatnmalenxnWheatnfemale 0.05       <NA>
 

Вы заполняете таблицу буквой NA s. Проблема levels(d$Matingdiet) в том , что Matingdiet это еще не фактор, поэтому у него его нет levels . Я не уверен в вашей цели, но попробуйте d$Matingdiet <- factor(d$Matingdiet) сначала добавить, тогда d$Matingdiet<-factor(d$Matingdiet,levels = rev(levels(d$Matingdiet))) это не вызовет никаких проблем.

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

1. Спасибо, я попробую это сделать. Я думаю, что все читалось как строка символов, а не факторы, так что вот где возникла проблема.