2012-02-10 9 views
12

ho scritto il seguente codice per rendere la tramaCome rendere scale_y_log10 di avere i segni di graduazione a 0.01,0.1,1 in ggplot

pd<- position_dodge(.2) # # move them .05 to the left and right 
pm25 <- ggplot(data, aes(x=CombSEG, y=conc,shape=A,color=A, lty=A,  group=A)) + 
geom_point() + 
geom_line() + 
geom_errorbar(aes(ymin=conc-se, ymax=conc+se), 
       width=.1, position=pd) + 
theme_bw()+ 
limits(c(0 
scale_y_log10(breaks=c(0.01,0.1,1),labels=c(0.01,0.1,1)) 

La scala automatica interruzioni sono 10^-1.8, 10^-1.6, 10^-1.4 ... 10^-0.4. Mi piacerebbe che il tick più basso fosse 0,01 e il tickmark più alto sia 1.

Grazie per il vostro aiuto.

Modifiche: Ecco come appare la trama dopo aver provato il codice. enter image description here

+0

Potrebbe dare un piccolo esempio riproducibile (cioè dati)? Anche se ne fai un po 'che simula il tuo problema? –

risposta

12

Utilizzare le breaks e labels argomenti di scale_y_log10 (leggere su di loro here).

# make up some sample data 
df <- data.frame(x=1:100,y=10^-(2*runif(100))) 
ggplot(df,aes(x=x,y=y)) + geom_point() + scale_y_log10() 

Assomiglia: enter image description here

Quindi per modificare la scala log10 di avere pause personalizzati a 0,01, 0,1 e 1, utilizzare l'argomento breaks:

ggplot(df,aes(x=x,y=y)) + geom_point() + scale_y_log10(breaks=c(.01,.1,1)) 

appare come segue: enter image description here

Infine, se si desidera che le etichette siano anche 0,1, .1 e 1, utilizzare labels argomento:

ggplot(df,aes(x=x,y=y)) + geom_point() + 
      scale_y_log10(breaks=c(.01,.1,1),labels=c(.01,.1,1)) 

enter image description here

+0

Ho provato lo stesso identico codice ma solo 0,1 si è mostrato nel mezzo. Ecco il massimo e il minimo dei dati Min. : 0,01504 Mediana: 0,03957 Media: 0,06148 max. : 0.43815 – Amateur

+0

Avevo un altro set di dati in cui Min = 0.1 e Max = .7 e l'unico 0,1 mostrato verso la fine della scala. – Amateur

+2

@TranHuynh Se i tuoi dati vanno da 0,1 a 0,7 e imposti manualmente le interruzioni a 0,01, 0,1 e 1, perché dovresti aspettarti di vederne uno eccetto 0.1? Se avessi fatto come richiesto e fornito un esempio riproducibile, avremmo potuto dirti dall'inizio di passare anche 'limits = c (0,1)' a 'scale_y_log10'. Non siamo lettori della mente. – joran

14

Utilizzare coord_trans() al posto di scala()

df <- data.frame(x=1:100,y=10^-(2*runif(100))) 
ggplot(df,aes(x=x,y=y)) + geom_point() + coord_trans(y = "log10") 

enter image description here

Problemi correlati