2012-06-19 19 views
12

Tengo este cinco (5) geom_vline() en mi diagrama y quiero que tengan diferentes colores. ¿Hay una manera de hacer eso?ggplot2: Cómo tener un color diferente de geom_vline()

Aquí está mi códigos,

library(ggplot2) 

x <- seq(-7, 8, length = 90) 
tvalues <- dt(x,15) 

qplot(x, tvalues) + geom_polygon(fill = "purple", colour = "purple", alpha = 0.5) + 
    geom_point(fill = "purple", colour = "purple", alpha = 0.2, pch = 21) + 
    geom_vline(xintercept = c(a <- c(-2.27685371, 0.01661155, 
    0.33598194, 1.92426022), mean(a)), linetype = "dashed", colour = "red") + theme_bw() + xlab(bquote(bold('Average Tensile Strength (lb/in'^'2'*')'))) + 
    ylab(expression(bold(P(x)))) + 
    opts(title = expression(bold("Student t Distribution")), plot.title = theme_text(size = 20, colour = "darkblue"), 
     panel.border = theme_rect(size = 2, colour = "red")) 

Y aquí está la salida,

enter image description here

Aviso las cinco líneas verticales en la trama, quiero que cada uno de los línea de tener un color diferente ,

Intenté esto

library(colorRamps) 
geom_vline(xintercept = c(a <- c(-2.27685371, 0.01661155, 
    0.33598194, 1.92426022), mean(a)), linetype = "dashed", colour = matlab.like(5)) 

pero no funcionó, Otro intento

geom_vline(xintercept = c(a <- c(-2.27685371, 0.01661155, 
    0.33598194, 1.92426022), mean(a)), linetype = "dashed", colour = c("red","blue","green","yellow","orange")) 

y todavía no tiene éxito.

¡Gracias de antemano!

Respuesta

26

así que estás tipo de falta la idea fundamental detrás de ggplot2, que es que siempre poner todos los datos en una data.frame y cada estético que asigna corresponde a una variable en su trama de datos.

Puede obtener 5 líneas verticales, cada una de un color diferente con cinco llamadas separadas a geom_vline, pero eso pasa por alto el punto de todo el paquete. En su lugar, se crea una trama de datos:

a <- c(-2.27685371,0.01661155,0.33598194,1.92426022) 
vlines <- data.frame(xint = c(a,mean(a)),grp = letters[1:5]) 

He creado explícitamente una variable de agrupación grp para asignar a colour. A continuación, añadimos la capa y el mapa de la estética a estas variables utilizando aes:

qplot(x, tvalues) + 
    geom_polygon(fill = "purple", colour = "purple", alpha = 0.5) + 
    geom_point(fill = "purple", colour = "purple", alpha = 0.2, pch = 21) + 
    geom_vline(data = vlines,aes(xintercept = xint,colour = grp), linetype = "dashed") + 
    theme_bw() + 
    xlab(bquote(bold('Average Tensile Strength (lb/in'^'2'*')'))) + 
    ylab(expression(bold(P(x)))) + 
    opts(title = expression(bold("Student t Distribution")), 
     plot.title = theme_text(size = 20, colour = "darkblue"), 
     panel.border = theme_rect(size = 2, colour = "red")) 

(Los colores serán difíciles de distinguir porque son líneas de puntos, y dos de ellos son casi una encima de la otra.)

obtendrá mucho más de ggplot2 si transición de qplot hacia ggplot() y empezar a poner sus datos en tramas de datos en lugar de vectores.

+0

Bueno, gracias por recordar que :) Debería haberlo pensado. Muchas gracias! ahorras mi tiempo :) –

+0

Muchas gracias @joran! –

+0

Esa es una gran respuesta, me dio la dirección correcta para hacer algo similar. Necesitaba agregar geom_hlines a la media de un diagrama con diferentes grupos. Me refería al grupo y usé geom_hline como lo describió usted. La diferencia es que he usado "tipo de línea = grp" para tener diferentes tipos de línea y estaba dentro de la llamada aes, en lugar de estar afuera como se muestra aquí. – Eduardo

1

Si solo quiere poner una línea, al agregar la siguiente geom se agregará una línea vertical en x=1 en color rojo y discontinua.

+ geom_vline(aes(xintercept=1), colour="#BB0000", linetype="dashed") 
Cuestiones relacionadas