Условные обозначения среднего и медианного значений в функции ggplot2

#r #ggplot2 #graphics #statistics #legend

#r #ggplot2 #графика #Статистика #условные обозначения

Вопрос:

Я пытаюсь добавить заголовок, в котором указано, что «шар» является средним значением, а «линия» является медианой диаграммы boxplot следующим образом:

 mediasCon1 = tapply(dados$FS, dados$Trat, mean)

boxplot(dados$FS ~ dados$Trat, data = dados, col="gray", 
        xlab = 'Tratamentos', ylab = 'Espermatozoides - Cauda Solta')
points(1:3, mediasCon1, col = 'black', pch = 16)
legend("topleft", legend=c("Média", "Mediana"),
       lty=c(NA,1), col="black", lwd=1:3, bty="n", pch=c(16,NA))
  

Однако при использовании функции ggplot2 появляется следующая ошибка:

 ggplot(data=dados, aes(x=Trat, y=FS))   geom_boxplot(fill=c("#DEEBF7","#2171B5","#034E7B"),color="black")  
  xlab('Tratamentos')  
  ylab('Espermatozoides - Cauda Solta')   
  stat_summary(fun=mean, colour="black", geom="point", 
               shape=18, size=5)   
  theme(axis.title = element_text(size = 20),
        axis.text = element_text(size = 16))  
legend("topleft", legend=c("Média", "Mediana"),
       lty=c(NA,1), col="black", lwd=1:3, bty="n", pch=c(16,NA))

Error in strwidth(legend, units = "user", cex = cex, font = text.font) : 
  plot.new has not been called yet

  

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

1. Это потому, что вы не можете добавить легенду к ggplot с помощью base R legend() .

Ответ №1:

Попробуйте этот подход:

 library(ggplot2)
#Code
ggplot(data=dados, aes(x=Trat, y=FS))   
  geom_line(aes(linetype='median'),size=1) 
  geom_point(aes(shape='mean'),size=5) 
  geom_boxplot(fill=c("#DEEBF7","#2171B5","#034E7B"),color="black")  
  xlab('Tratamentos')  
  ylab('Espermatozoides - Cauda Solta')   
  stat_summary(fun=mean, colour="black", geom="point", 
               shape=18, size=5)   
  theme(axis.title = element_text(size = 20),
        axis.text = element_text(size = 16)) 
  scale_linetype_manual('Variable',values='solid') 
  scale_shape_manual('',values = 18) 
  theme(legend.spacing.y = unit(0.1, "cm"))
  

Вывод:

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