2010-08-31 15 views
7

que han generado la siguiente trama utilizando el código R que le sigue: alt text¿Cómo hacer que ggplot2 trama más bonita?

ggplot(lengths, aes(length, fill = library)) + geom_density(alpha = 0.2) + coord_cartesian(xlim = c(0, 60000)) 

Ahora me gustaría hacer la trama un poco más bonita:

  1. Hacer el eje x Duración del espectáculo cada 5000 unidades (en lugar de cada 20000)
  2. Agregue x-values ​​en la parte superior de los tres picos (aproximadamente 3000,5000 y 35000).

¿Cómo puedo hacer eso?

actualización en respuesta a James: alt text

+2

FWIW, esa es una trama bastante sexy allí mismo. – notJim

+0

Puede agregar una línea vertical desde los picos al eje x. 'geom_segment (data = peakdat, aes (x = x, xend = x, y = y, yend = 0))' debe al truco, donde 'peakdat' es de la respuesta de Ben B. –

Respuesta

11

¿Qué tal:

(primero crear un ejemplo reproducible)

set.seed(1001) 
lengths <- data.frame(length=c(rgamma(1000,shape=10,scale=500), 
        10000+rgamma(1000,shape=5,scale=700), 
        rnorm(500,mean=30000,sd=2000)), 
        library=factor(rep(2:1,c(2000,500)))) 

(materia linda para encontrar localizaciones de pico y alturas)

peakfun <- function(x) { 
    d <- density(x$length) 
    peaks <- which(diff(sign(diff(d$y)))==-2) 
    data.frame(x=d$x[peaks],y=d$y[peaks]) 
} 

peakdat <- ddply(lengths,.(library),peakfun) 
peakdat <- peakdat[-1,] ## drop spurious peak 

(dibujar la superficie)

library(ggplot2) 
ggplot(lengths, aes(length, fill = library)) + 
    geom_density(alpha = 0.2) + 
    scale_x_continuous(limits = c(0,60000), 
        breaks = seq(0,60000,by=5000))+ 
    geom_text(data=peakdat,aes(x=x,y=y,label=round(x)),vjust=1) 

usted Probablemente quiera ajustar la altura vertical de las etiquetas un poco

+0

+1 Yo daría +10 si pudiera ... :). ¡Gracias! –

6

1: + scale_x_continuous(breaks=rep(5000,12)).

También puede poner la declaración xlim aquí, usando limits, por ejemplo,

+ scale_x_continuous(breaks=rep(5000,12),limits=c(0,60000)) 

2: Para las etiquetas que usted podría utilizar annotate() o geom_text(). Consulte la publicación this para ver ejemplos. Sin embargo, usted tendría que calcular los valores usted mismo para esto.

+0

al agregar la declaración xlim no parece funcionar bien. mira la publicación original para ver lo que obtengo –

+0

Disculpe, utiliza 'limits' en lugar de' xlim' aquí, publicación original editada para explicar mejor. – James

Cuestiones relacionadas