2012-01-05 22 views
10

Tengo una pregunta difícil con respecto a lo que estoy tratando de hacer. Tengo un diagrama con dos líneas (la media de dos condiciones) en él. Quiero agregar en el mismo diagrama un cuadrado que refleje los valores t (y coloreado de acuerdo con estos valores de forma gradiente). ¿Cómo podría agregar este cuadrado?ggplot2: Agregue un cuadrado de color degradado de acuerdo con los valores

Bueno, ya que no sé si estoy claro, aquí hay una figura de lo que intento lograr.

¡Gracias por cualquier ayuda!

enter image description here

+1

¿Podría publicar algún ejemplo reproducible? –

Respuesta

16

Prueba esto para ggplot2 manera:

x <- seq(-10, 10, 0.1) 
df <- data.frame(x, y1 = pnorm(x), y2 = pnorm(x) * 2) 
df$t <- df$y2 - df$y1 
dfm <- melt(df, id = "x") 

ggplot(NULL, aes(x, value)) + 
    geom_line(aes(colour = variable), 
      droplevels(subset(dfm, variable %in% c("y1", "y2")))) + 
    geom_rect(aes(xmin = x - 0.05, xmax = x + 0.05, ymin = -0.5, ymax = -0.4, fill = value), 
      subset(dfm, variable == "t")) 

enter image description here

ACTUALIZADO

Puede utilizar scale_fill_XXX. He aquí una versión del jet-color:

jet.colors <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan","#7FFF7F", "yellow", "#FF7F00", "red", "#7F0000")) 

# panel on the left side 
p <- ggplot(NULL, aes(x, value)) + 
    geom_line(aes(colour = variable), 
      droplevels(subset(dfm, variable %in% c("y1", "y2")))) + 
    geom_rect(aes(xmin = x - 0.05, xmax = x + 0.05, ymin = -0.5, ymax = -0.4, fill = value), 
      subset(dfm, variable == "t")) + 
    scale_fill_gradientn(colours = jet.colors(7)) 
p 

y en la siguiente versión de ggplot2, puede utilizar la barra de colores como la leyenda.

# panel on the right side 
    p + guides(fill = "colourbar") 

enter image description here

+0

¡Muchas gracias, funciona realmente bien! Otra pregunta: ¿Sabrías cómo podría manipular los colores del degradado? Muchas gracias! – clowny

+1

@clowny Actualizado. – kohske

+1

Sugeriría 'geom_raster' en lugar de' geom_rect' – baptiste

0

Para los gráficos de base se puede utilizar la función rasterImage añadir un rectángulo con el gradiente en él a un gráfico.

Cuestiones relacionadas