2012-02-29 15 views
20

Soy nuevo en R y me gustaría saber cómo etiquetar los puntos de datos en un diagrama de dispersión. Intenté con el siguiente código, pero recibo un error.¿Cómo etiquetar puntos en un diagrama de dispersión con R?

x = c(102856,17906,89697,74384,91081,52457,73749,29910,75604,28267,122136, 
     54210,48925,58937,76281,67789,69138,18026,90806,44893) 
y = c(2818, 234, 2728, 2393, 2893, 1015, 1403, 791, 2243, 596, 2468, 1495, 
     1232, 1746, 2410, 1791, 1706, 259, 1982, 836) 

plot(x, y, main="Scatterplot ", xlab="xaxis ", ylab="yaxis ", pch=19) 

names = c("A","C","E","D","G","F","I","H","K","M","L","N","Q","P","S","R", 
      "T","W","V","Y") 

library(calibrate) 
textxy(x, y, labs=names, cx = 0.5, dcol = "black", m = c(0, 0)) 

Error in text.default(X[posXposY], Y[posXposY], labs[posXposY], adj = c(-0.3, : 
plot.new has not been called yet 

No entiendo acerca de este error. Por favor me ayude a

+1

El mensaje de error parece que su trazado ya no está abierto cuando llama a 'textxy (x, y, labs = nombres, cx = 0.5, dcol =" negro ", m = c (0, 0))'. Intenta llamar a tu declaración de complot nuevamente antes de usar las etiquetas. – Sophia

+0

@sophia, gracias por tu comentario. Lo intenté. Pero sigo recibiendo el error – lara

+0

. Por razones de interés, dado que no estoy familiarizado con 'calibrar', ¿hay algo que 'textxy' haga que la herramienta básica' text' para los puntos de etiquetado no funcione? –

Respuesta

12

Se podía hacerlo en ggplot2:

require(ggplot2) 
d <- data.frame(x = c(102856,17906,89697,74384,91081,52457,73749,29910,75604,28267,122136, 54210,48925,58937,76281,67789,69138,18026,90806,44893), y = c(2818, 234, 2728, 2393, 2893, 1015, 1403, 791, 2243, 596, 2468, 1495, 1232, 1746, 2410, 1791, 1706, 259, 1982, 836), names = c("A","C","E","D","G","F","I","H","K","M","L","N","Q","P","S","R","T","W","V","Y")) 
ggplot(d, aes(x,y)) + geom_point() + geom_text(aes(label=names)) 

Es posible que desee las etiquetas de texto no estar directamente encima de los puntos, lo que se podría lograr mediante el uso de las hjust o vjust argumentos en la parte geom_text.

+0

Gracias por su respuesta. Probé tu código. pero obteniendo este error. Error en get (x, envir = this, inherits = inh) (this, ...): intento de aplicar la función no – lara

+0

No estoy seguro de lo que está causando eso, pero esto podría ayudar: [ Error al intentar cargar la biblioteca (ggplot2) en R] (http: // stackoverflow.com/questions/6066130/error-when-trying-to-load-libraryggplot2-in-r) –

6

el código funciona para mí con:

> sessionInfo() 
R version 2.14.2 Patched (2012-02-29 r58525) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_GB.utf8  LC_NUMERIC=C    
[3] LC_TIME=en_GB.utf8  LC_COLLATE=en_GB.utf8  
[5] LC_MONETARY=en_GB.utf8 LC_MESSAGES=en_GB.utf8 
[7] LC_PAPER=C    LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C   
[11] LC_MEASUREMENT=en_GB.utf8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods 
[7] base  

other attached packages: 
[1] calibrate_1.7 mgcv_1.7-13 

loaded via a namespace (and not attached): 
[1] grid_2.14.2 lattice_0.20-0 Matrix_1.0-4 nlme_3.1-103 
[5] tools_2.14.2 

Comprobar que tiene un R-actualizada y la versión del calibrar y si no las actualiza y vuelve a intentarlo.

Sería más natural utilizar el siguiente ordenamiento de sus llamadas:

> library(calibrate) 
> names = c("A","C","E","D","G","F","I","H","K","M","L","N","Q","P","S","R", 
+   "T","W","V","Y") 
> plot(x, y, main="Scatterplot ", xlab="xaxis ", ylab="yaxis ", pch=19) 
> textxy(x, y, labs=names, cx = 0.5, dcol = "black", m = c(0, 0)) 

No debería haber ninguna diferencia si la ventana de dibujo producido por la llamada plot() todavía está abierta.

+0

Gracias por su respuesta. Actualicé R, pero todavía recibo el mismo error. Estoy usando Windows. – lara

+0

@lara ¿actualizó también el paquete? ¿O ya era la última versión? –

+0

sí, actualicé el paquete. – lara

38

Puede crearlo fácilmente utilizando la función text().

text(x,y,labels=names) 
3

No necesita el paquete de calibración. Que puede hacer:

texto (x, y-50, los nombres)

No funciona para mí.

+0

¿Y por qué esta respuesta es mejor que otra que haya sido aceptada por OP? – bcesars

+0

Porque no requiere ninguna dependencia adicional – fny

+0

Me gusta un poco mejor que la solución de TheRimalaya debido a la compensación (aunque el desplazamiento que elija debe basarse en la escala de su gráfico. -50 probablemente funcione para la pregunta en mano) –

Cuestiones relacionadas