Indiquant la différence statistiquement significative dans le diagramme à barres à L'aide de R
C'est une répétition d'une question initialement posée ici: indiquant la différence statistiquement significative dans le graphique à barres mais a demandé R à la place de python.
Ma question est très simple. Je veux produire barplots en R, en utilisant ggplot2 si possible, avec une indication de différence significative entre les différentes barres, par exemple produire quelque chose comme ceci. J'ai fait des recherches, mais je n'arrive pas à trouver une autre question qui demande exactement la même chose. chose.
3 réponses
Vous pouvez utiliser geom_path()
et annotate()
pour obtenir un résultat similaire. Pour cet exemple, vous devez déterminer vous-même la position appropriée. geom_path()
quatre nombres sont fournis pour obtenir ces petites tiques pour les lignes de connexion.
df<-data.frame(group=c("A","B","C","D"),numb=c(12,24,36,48))
g<-ggplot(df,aes(group,numb))+geom_bar(stat="identity")
g+geom_path(x=c(1,1,2,2),y=c(25,26,26,25))+
geom_path(x=c(2,2,3,3),y=c(37,38,38,37))+
geom_path(x=c(3,3,4,4),y=c(49,50,50,49))+
annotate("text",x=1.5,y=27,label="p=0.012")+
annotate("text",x=2.5,y=39,label="p<0.0001")+
annotate("text",x=3.5,y=51,label="p<0.0001")
je sais que c'est une vieille question et la réponse de Didzis Elferts apporte déjà une solution au problème. Mais j'ai récemment créé une extension ggplot qui simplifie tout le processus d'ajout de barres de signification: ggsignif
au lieu d'ajouter legeom_path
et annotate
à votre parcelle vous ajoutez juste une couche simple geom_signif
:
library(ggplot2)
library(ggsignif)
ggplot(iris, aes(x=Species, y=Sepal.Length)) +
geom_boxplot() +
geom_signif(comparisons = list(c("versicolor", "virginica")),
map_signif_level=TRUE)
la documentation complète du paquet est disponible sur CRAN.
j'ai utilisé la méthode suggérée ci-dessus, mais j'ai trouvé la fonction Annoter plus facile pour faire des lignes que la fonction geom_path. Il suffit d'utiliser "segment" au lieu de "texte". Vous devez séparer les choses par segment et définir les valeurs de départ et de fin x et y pour chaque segment de ligne.
exemple pour faire 3 segments de lignes:
annotate("segment", x=c(1,1,2),xend=c(1,2,2), y= c(125,130,130), yend=c(130,130,125))