2015-05-13

Etiquetar selectivamente los puntos de un diagrama de dispersión con ggplot2

Title

Problema

Tenemos un diagrama de dispersión.

qplot(dpi, sr, data = LifeCycleSavings)
Si etiquetáramos todos los puntos obtendríamos un gráfico con muchas de las etiquetas superpuestas.

qplot(dpi, sr, data = LifeCycleSavings, label = rownames(data))+
  geom_text(vjust = 1.5)

Solución

Opción 1

LifeCycleSavings$lab <- rownames(LifeCycleSavings)
newlab <- subset(LifeCycleSavings, lab %in% c("Canada", "Sweden", "United Kingdom", "United States", "Iceland", "Japan", "Spain", "Netherlands", "Switzerland", "Denmark"))
  1. lab, creamos una nueva columna con los nombres de las filas.
  2. newlab, subconjunto de las filas que deseamos etiquetar.
  3. Utilizamos lab dentro de aes y las nuevas, newlab, en geom_text.
  • qplot
qplot(dpi, sr, data = LifeCycleSavings, label = lab)+  
  geom_text(data = newlab , vjust = 1.5)
  • ggplot
ggplot(LifeCycleSavings, aes(x = dpi, y = sr, label = lab)) + 
  geom_point() + 
  geom_text(data = newlab , vjust = 1.5)
Opción 2

Name <- rownames(LifeCycleSavings)
idx <- Name %in% c("Canada", "Sweden", "United Kingdom", "United States", "Iceland", "Japan", "Spain", "Netherlands", "Switzerland", "Denmark") 
Name[!idx] <- NA
  1. Name, vector con los nombres de las etiquetas: nombres de las filas.
  2. idx, vector lógico (verdadero o falso) con TRUE para las etiquetas que deseamos conservar.
  3. Asignamos al vector Name el valor NA para aquellos nombres no presentes en el vector anterior.
  • qplot
qplot(dpi, sr, data = LifeCycleSavings, label = Name)+  
  geom_text(vjust = 1)
  • ggplot
p <- ggplot(LifeCycleSavings, aes(x = dpi, y = sr, label = Name))
p +  geom_point() + geom_text(vjust = 1.5)
Opción3

Con el paquete base graphics

plot(sr ~ dpi, 
     LifeCycleSavings, 
     xlab = 'Real Per-Capita Disposable Income', 
     ylab = 'Aggregate Personal Savings', 
     main = 'Intercountry Life-Cycle Savings Data')
text(LifeCycleSavings$dpi,
     LifeCycleSavings$sr,
     Name, pos = 1)

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos