Avec ce code:
library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point()
p + geom_point() + geom_text(aes(wt, mpg, label=row.names(mtcars)))
J'obtiens ce graphique:
Comment puis-je modifier le code ci-dessus pour qu'il ne marque que le point où wt > 4
ou mpg > 25
, tandis que les autres points restent sans étiquette.
Fournissez un argument data
à geom_text
:
library(ggplot2)
mtcars$name <- row.names(mtcars)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point()
p + geom_point() +
geom_text(data=subset(mtcars, wt > 4 | mpg > 25),
aes(wt,mpg,label=name))
Tracé résultant:
PS: Je ne suis vraiment pas fan du style p + geom()
de construction de ggplots, je suis presque sûr que hadley l'a fait dans le livre ggplot2 original pour démontrer différentes modifications du même terrain, mais les gens semblent avoir ramassé et courir avec. Voici comment je le ferais:
+
, Ne sauvegardez pas chaque étape intermédiaire.ggsave()
ggplot
, ne modifiez les autres choses que si nécessaireMa version:
ggplot(mtcars, aes(wt, mpg, label=name)) +
geom_point() +
geom_text(data=subset(mtcars, wt > 4 | mpg > 25))
Vous pouvez passer un argument subset
à un calque. Dans votre cas, cela nécessiterait d'avoir les noms de domaine sous forme de colonne, afin qu'ils soient évalués correctement. Vous devrez charger explicitement plyr
pour obtenir la fonction .
ce qui facilite la syntaxe.
# shamelessly using @marius initial code
library(ggplot2)
library(plyr)
mtcars$name <- row.names(mtcars)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point() + geom_text(aes(wt,mpg,label=name), subset = .(wt > 4 | mpg > 25))
Vous pouvez simplement obtenir une variable supplémentaire:
carnames <- row.names(mtcars)
carnames[with(mtcars, !(wt > 4 | mpg > 25))] <- ""
p + geom_point() + geom_text(aes(wt,mpg,label=carnames))
une solution de réseau similaire à ggplot2 :-)
library(latticeExtra)
xyplot(mpg~wt, data=mtcars,pch=19,
panel =function(x,y,...){
# panel.xyplot(x,y,...)
data=subset(mtcars, wt > 4 | mpg > 25)
panel.text(data$wt,data$mpg,label=row.names(data),
col='red',cex=2)
},par.settings = ggplot2like(), axis = axis.grid)