2012-01-19 10 views
10

Ho alcuni dati che mostrano una relazione geometrica, ma hanno valori anomali. Per esempio:Impossibile impostare i limiti con coord_trans

x = seq(0.1, 1, 0.01) 
dat = data.frame(x=x, y=10^x) 
dat[50:60, 2] = 10 

qplot(x, y, data=dat, geom='line') 

enter image description here

vorrei tracciare questo utilizzando un registro di trasformare e, mentre lo zoom su una parte dei dati. So che posso fare la prima parte con coord_trans(y='log10') o la seconda parte con coord_cartesian(ylim=c(2,8)), ma non sono riuscito a combinarli. Inoltre, ho bisogno di mantenere questi punti, quindi semplicemente ritoccandoli con scale_y_continuous(limits=c(2,8)) non funzionerà per me.

C'è un modo per realizzare questo senza dover ricorrere al seguente attacco terribile? Forse un modo non documentato per passare i limiti a coord_trans?

pow10 <- function(x) as.character(10^x) 

qplot(x, log10(y), data=dat, geom='line') + 
    scale_y_continuous(breaks=log10(seq(2,8,2)), formatter='pow10') + 
    coord_cartesian(ylim=log10(c(2,8))) 

enter image description here

+0

Il mio male. Pensavo di averlo risolto, ma oggi non sto pensando esattamente. – joran

+0

Se si guarda '+ .ggplot' è chiaro che si può applicare solo 1 oggetto coord proto alla volta. Più semplicemente sovrascrivi quelli più vecchi. – James

+0

@James si certo. Sto cercando di impostare lims in coord_trans, che è difficile (non possibile?) Anche se è facile eseguirli entrambi individualmente ... –

risposta

4

Questo può essere un po 'più semplice work-around:

library(ggplot2) 

x = seq(0.1, 1, 0.01) 
dat = data.frame(x=x, y=10^x) 
dat[50:60, 2] = 10 

plot_1 = ggplot(dat, aes(x=x, y=y)) + 
     geom_line() + 
     coord_cartesian(ylim=c(2, 8)) + 
     scale_y_log10(breaks=c(2, 4, 6, 8), labels=c("2", "4", "6", "8")) 

png("plot_1.png") 
print(plot_1) 
dev.off() 

enter image description here

+0

Sì, funzionerà bene. Anche le zecche minori sono nella loro posizione corretta. Grazie! –

1

Ho avuto lo stesso problema e ha lottato per risolverlo fino guardando più da vicino ?coord_trans (in v1.0.0 di ggplot2):

Uso

coord_trans (xtrans = "identità", ytrans = "identità", LIMx = NULL, calcareo = NULL)

modo da poter impostare le trasformazioni ei limiti allo stesso tempo, come questo:

ggplot(dat, aes(x=x, y=y)) + geom_line() + 
    coord_trans(ytrans="log10", limy=c(2,8)) 
+0

L'utilizzo dei limiti all'interno del livello coord_trans influisce sui riepiloghi? Oppure si applicano come uno strato coord_cartesiano (vale a dire puramente limitando l'intervallo visualizzato)? – JMichael

Problemi correlati