2010-08-31 15 views
7

Mi hanno generato la trama di seguito utilizzando il codice R che lo segue: alt textCome rendere i grafici ggplot2 più belli?

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

Ora mi piacerebbe fare la trama un po 'più carina:

  1. rendere lo spettacolo di lunghezza asse x ogni unità 5000 (anziché ogni 20000)
  2. Aggiungere i valori x sopra i tre picchi (circa 3000,5000 e 35000).

Come posso farlo?

aggiornamento in risposta a James: alt text

+2

FWIW, questa è una trama abbastanza sexy proprio lì. – notJim

+0

È possibile aggiungere una linea verticale dai picchi all'asse x. 'geom_segment (data = peakdat, aes (x = x, xend = x, y = y, yend = 0))' dovrebbe andare al trucco, dove 'peakdat' viene dalla risposta di Ben B. –

risposta

11

ne dite:

(prima creare un esempio riproducibile)

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)))) 

(roba carina per trovare le posizioni di picco e le altezze)

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 

(disegnare la trama)

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) 

voi probabilmente vorrai modificare leggermente l'altezza verticale delle etichette

+0

+1 darei +10 se potessi ... :). Grazie! –

6

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

si potrebbe anche mettere la dichiarazione xlim qui, utilizzando limits, ad esempio,

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

2: Per le etichette è possibile utilizzare annotate() o geom_text(). Vedi il post this per gli esempi. Dovresti comunque calcolare i valori per questo.

+0

aggiungendo la dichiarazione xlim non sembra funzionare bene. vedi post originale per vedere cosa ottengo. –

+0

Siamo spiacenti, utilizza 'limiti' piuttosto che' xlim' qui, post originale modificato per spiegare meglio. – James

Problemi correlati