2012-07-13 20 views
7

Quiero resaltar los puntos seleccionados y encontré un comportamiento extraño. Primero algunos datos ficticios:r - ggplot2 - resaltar los puntos seleccionados y el comportamiento extraño

a <- 1:50 
b <- rnorm(50) 
mydata <- data.frame(a=a,b=b) 
ggplot(mydata,aes(x=a,y=b)) + geom_point() 

Esto funciona correctamente. Ahora, para poner de relieve algunos puntos, añado otra capa geom_point:

ggplot(mydata[20:40,],aes(x=a,y=b)) + 
    geom_point() + 
    geom_point(aes(x=a[c(10,12,13)],y=b[c(10,12,13)]),colour="red") 

Tenga en cuenta que estoy mostrando sólo una gama limitada de los datos ([20:40]). Ahora viene el comportamiento extraño:

ggplot(mydata[10:40,],aes(x=a,y=b)) + 
    geom_point() + 
    geom_point(aes(x=a[c(10,12,13)],y=b[c(10,12,13)]),colour="red") 

Cambiar el tamaño del rango seleccionado, me sale un error, más o menos traducido del alemán: Error...: Arguments implying different number of rows. Extrañamente, esto varía con el rango seleccionado. [23:40] funcionará, [22:40] no lo hará.


El error en Inglés es:

Error in data.frame(x = c(19L, 21L, 22L), y = c(0.28198, -0.6215, : 
    arguments imply differing number of rows: 3, 31 
+0

espero que no te importe, pero he añadido el error en Inglés – csgillespie

Respuesta

22

Si los datos es diferente entre las diferentes capas, a continuación, es necesario especificar los nuevos datos para cada capa.

Esto se hace con el argumento data=... para cada geom que necesita de datos diferente:

set.seed(1) 
mydata <- data.frame(a=1:50, b=rnorm(50)) 
ggplot(mydata,aes(x=a,y=b)) + 
    geom_point(colour="blue") + 
    geom_point(data=mydata[10:13, ], aes(x=a, y=b), colour="red", size=5) 

enter image description here

+0

Bueno, los datos no son realmente diferentes, sólo un subconjunto diferente. Pero esta solución es al menos estable. Funciona solo con nomenclatura explícita ('data = ...'). Pero no hay explicación para ese extraño error ... – lambu0815

+0

@ lambu0815 El hecho de que sea un subconjunto diferente lo hace diferente. Tuviste ese extraño error porque trataste de asignar una estética única (x) a tres elementos diferentes. La estética debe estar asignada a los nombres de las columnas. Tampoco tiene que nombrar explícitamente el argumento 'data = ...', pero luego necesita tener los argumentos en el orden correcto, es decir 'geom_point (aes (...), data, ...)' – Andrie

0

Otra opción de añadir las condiciones para ambos atributos, color y tamaño, dentro geom_point. Luego controlamos manualmente aquellos que usan scale_colour_manual y scale_size_manual respectivamente.

set.seed(1) 
mydata <- data.frame(a = 1:50, b = rnorm(50)) 
ggplot(mydata) + 
    geom_point(aes(x = a, y = b, colour = a > 9 & a < 14, size = a > 9 & a < 14)) + 
    scale_colour_manual(values = c("blue", "red")) + 
    scale_size_manual(values =c(1, 4))+ 
    theme(legend.position = "none") 

enter image description here