Etiquetar puntos en geom_point

Los datos con los que estoy jugando provienen de la fuente de Internet que figura a continuación

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",") 

Lo que quiero hacer es crear un gráfico de puntos 2D que compare dos métricas de esta tabla, con cada jugador representando un punto en el gráfico. Tengo el siguiente código:

 nbaplot <- ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name)) + geom_point() 

Esto me da lo siguiente:

Trama de la NBA

Lo que quiero es una etiqueta del nombre del jugador justo al lado de los puntos. Pensé que la función de etiqueta en la estética de ggplot haría esto por mí, pero no fue así.

También probé la función text() y la función textxy() de la library(calibrate) , ninguna de las cuales parece funcionar con ggplot.

¿Cómo puedo agregar tags de nombre a estos puntos?

Usa geom_text , con la etiqueta aes . Puedes jugar con hjust, vjust para ajustar la posición del texto.

 ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name))+ geom_point() +geom_text(aes(label=Name),hjust=0, vjust=0) 

enter image description here

EDITAR: etiqueta solo los valores por encima de un cierto umbral:

  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) 

tabla con etiquetas condicionales

ggrepel paquete ggrepel funciona muy bien para este caso

 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() 

enter image description here

 ### 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) 

Creado en 2018-05-11 por el paquete reprex (v0.2.0).

En lugar de usar ifelse como en el ejemplo anterior, también se pueden prefiltrar los datos antes del etiquetado en función de algunos valores de umbral, lo que ahorra mucho trabajo al dispositivo de trazado:

 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)) 
Intereting Posts