Les données avec lesquelles je joue proviennent de la source Internet répertorié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 métriques 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 d'étiquette dans l'esthétique de ggplot ferait cela pour moi, mais ce n'est pas le cas.
J'ai également essayé la text()
fonction et la textxy()
fonction from library(calibrate)
, dont aucune ne semble fonctionner avec ggplot.
Comment puis-je ajouter des étiquettes de nom à ces points?
ggplot2
. Peut - être que cela peut vous aider.hjust = -0.1
pour éloigner légèrement les étiquettes imprimées du point de données.Le
ggrepel
package fonctionne très bien pour repousser les étiquettes de texte qui se chevauchent les unes des autres. Vous pouvez utilisergeom_label_repel()
(dessine des rectangles autour du texte) ou desgeom_text_repel()
fonctions.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 or < 18 # 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 = dplyr::case_when(nba$PTS > 25 ~ "#1b9e77", nba$PTS < 18 ~ "#d95f02", TRUE ~ "#7570b3"), size = 3, alpha = 0.8) + geom_text_repel(data = subset(nba, PTS > 25), nudge_y = 32 - subset(nba, PTS > 25)$PTS, size = 4, box.padding = 1.5, point.padding = 0.5, force = 100, segment.size = 0.2, segment.color = "grey50", direction = "x") + geom_label_repel(data = subset(nba, PTS < 18), nudge_y = 16 - subset(nba, PTS < 18)$PTS, size = 4, box.padding = 0.5, point.padding = 0.5, force = 100, segment.size = 0.2, segment.color = "grey50", direction = "x") + scale_x_continuous(expand = expand_scale(mult = c(0.2, .2))) + scale_y_continuous(expand = expand_scale(mult = c(0.1, .1))) + theme_classic(base_size = 16)
Edit: à utiliser
ggrepel
avec des lignes, voyez ceci et cela .Créé le 01/05/2019 par le package reprex (v0.2.0).
la source
ggplot2
qui mentionnait une chose similaire github.com/tidyverse/ggplot2/commit/… . Vous pouvez essayer d'installer les deux versions de développement deggplot2
&ggrepel
pour voir si votre problème est résolulemon
package qui est très bon pour manipuler la légende de l'intrigue.Au lieu d'utiliser l'ifelse comme dans l'exemple ci-dessus, on peut également pré-filtrer les données avant l'étiquetage en fonction de certaines valeurs de seuil, cela é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))
la source