42 votes

Comment bien annoter un ggplot2 (manuel)

En utilisant ggplot, j'utilise normalement geom_text et quelque chose comme position = jitter pour annoter mes parcelles.

Cependant, pour un beau tracé, je trouve souvent intéressant d’annoter manuellement. comme ci-dessous:

data2 <- structure(list(type = structure(c(5L, 1L, 2L, 4L, 3L, 5L, 1L, 2L, 4L, 3L, 5L, 1L, 2L, 4L, 3L, 5L, 1L, 2L, 4L, 3L), .Label = c("EDS", "KIU", "LAK", "MVH", "NA*"), class = "factor"), value = c(0.9, 0.01, 0.01, 0.09, 0, 0.8, 0.05, 0, 0.15, 0, 0.41, 0.04, 0.03, 0.52, 0, 0.23, 0.11, 0.02, 0.64, 0.01), time = c(3L, 3L, 3L, 3L, 3L, 6L, 6L, 6L, 6L, 6L, 15L, 15L, 15L, 15L, 15L, 27L, 27L, 27L, 27L, 27L), year = c(2008L, 2008L, 2008L, 2008L, 2008L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2006L, 2006L, 2006L, 2006L, 2006L)), .Names = c("type", "value", "time", "year"), row.names = c(1L, 3L, 4L, 5L, 6L, 7L, 9L, 10L, 11L, 12L, 13L, 15L, 16L, 17L, 18L, 19L, 21L, 22L, 23L, 24L), class = "data.frame")

 ggplot(data2, aes(x=time, y=value, group=type, col=type))+
geom_line()+
geom_point()+
theme_bw()+
annotate("text", x=6, y=0.9, label="this is a wrong color")+
annotate("text", x=15, y=0.6, label="this is a second annotation with a wrong color")
 

Le problème est que je ne parviens pas à faire correspondre la couleur des annotations de texte à la couleur de la ligne. Je suppose que je pourrais résoudre ce problème avec une balance manuelle, mais j'espère qu'il y a un meilleur moyen?

Cordialement!

66voto

mbask Points 950

J'ai eu un problème similaire et résolu avec JD Longue réponse. Mais comme les résultats de l' ggplot2 de la mise à jour vers la version 0.9.0 j'ai remarqué que tous geom_text()des appels rendu un peu floue sur les parcelles.

Grâce à kohske j'ai découvert que ce code

ggplot(data2, aes(x=time, y=value, group=type, col=type))+
geom_line()+
geom_point()+
theme_bw() +
geom_text(aes(7, .9, label="correct color", color="NA*")) +
geom_text(aes(15, .6, label="another correct color!", color="MVH")) 

les parcelles de la geom_text nrow(data2)fois!

La bonne façon pour la transmission de données à geom_text est la construction d'une autre.cadre de la tenue de coordonnées, les étiquettes et les couleurs pour les chaînes que vous voulez être tracées:

data2.labels <- data.frame(
  time = c(7, 15), 
  value = c(.9, .6), 
  label = c("correct color", "another correct color!"), 
  type = c("NA*", "MVH")
  )

ggplot(data2, aes(x=time, y=value, group=type, col=type))+
  geom_line()+
  geom_point()+
  theme_bw() +
  geom_text(data = data2.labels, aes(x = time, y = value, label = label))

48voto

JD Long Points 20477

Si vous utilisez geom_text () au lieu de annotate (), vous pouvez transmettre une couleur de groupe à votre tracé:

 ggplot(data2, aes(x=time, y=value, group=type, col=type))+
geom_line()+
geom_point()+
theme_bw() +
geom_text(aes(7, .9, label="correct color", color="NA*")) +
geom_text(aes(15, .6, label="another correct color!", color="MVH")) 
 

Donc, en utilisant annotate (), cela ressemble à ceci: texte alternatif

puis après avoir utilisé geom_text () cela ressemble à ceci: texte alternatif

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X