Les données avec lesquelles je joue proviennent de la source Internet indiquée ci-dessous
nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")
Ce que je veux faire, c’est créer un graphique de points 2D comparant deux mesures de ce tableau, chaque joueur représentant un point sur le graphique. J’ai le code suivant:
nbaplot <- ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name)) + geom_point()
Cela me donne ce qui suit:
Ce que je veux, c’est une étiquette du nom du joueur juste à côté des points. Je pensais que la fonction label de l’esthétique de ggplot ferait cela pour moi, mais ce n’était pas le cas.
J’ai aussi essayé la fonction text()
et la fonction textxy()
de la library(calibrate)
, qui ne semble pas fonctionner avec ggplot.
Comment puis-je append des étiquettes de nom à ces points?
Utilisez geom_text
, avec une étiquette aes
. Vous pouvez jouer avec hjust, vjust
pour ajuster la position du texte.
ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name))+ geom_point() +geom_text(aes(label=Name),hjust=0, vjust=0)
ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name))+ geom_point() + geom_text(aes(label=ifelse(PTS>24,as.character(Name),'')),hjust=0,vjust=0)
paquet ggrepel
fonctionne très bien pour ce cas
library(ggplot2) library(ggrepel) nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep = ",") nbaplot <- ggplot(nba, aes(x= MIN, y = PTS)) + geom_point(color = "blue", size = 3) ### geom_label_repel nbaplot + geom_label_repel(aes(label = Name), box.padding = 0.35, point.padding = 0.5, segment.color = 'grey50') + theme_classic()
### geom_text_repel # only label players with PTS > 25 and # align text vertically with nudge_y and allow the labels to # move horizontally with direction = "x" ggplot(nba, aes(x= MIN, y = PTS, label = Name)) + geom_point(color = ifelse(nba$PTS > 25, "red", "blue"), size = 3) + geom_text_repel(data = subset(nba, PTS > 25), nudge_y = 32 - subset(nba, PTS > 25)$PTS, segment.size = 0.2, segment.color = "grey50", direction = "x") + scale_x_continuous(expand = c(0.05, 0.05)) + scale_y_continuous(limits = c(NA, 33)) + theme_classic(base_size = 12)
Créé le 2018-05-11 par le package reprex (v0.2.0).
Au lieu d’utiliser le ifelse comme dans l’exemple ci-dessus, il est également possible de préfiltrer les données avant l’étiquetage en fonction de certaines valeurs seuils, ce qui économise beaucoup de travail pour le dispositif de traçage:
xlimit <- 36 ylimit <- 24 ggplot(myData)+geom_point(aes(myX,myY))+ geom_label(data=myData[myData$myX > xlimit & myData$myY> ylimit,], aes(myX,myY,myLabel))