2012-01-19 8 views
10

Tengo algunos datos que muestran una relación geométrica, pero tienen valores atípicos. Por ejemplo:No se pueden establecer los límites 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

me gustaría trazar esta usando un registro de transformar y mientras está ampliada a una parte de los datos. Sé que puedo hacer la primera parte con coord_trans(y='log10'), o la segunda parte con coord_cartesian(ylim=c(2,8)), pero no he podido combinarlos. Además, necesito mantener estos puntos, por lo que simplemente los clipping con scale_y_continuous(limits=c(2,8)) no funcionarán para mí.

¿Hay alguna manera de lograr esto sin tener que recurrir al siguiente terrible truco? Tal vez una forma no documentada de pasar los límites 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

Mi mal. Pensé que había resuelto eso, pero no estoy pensando en serio hoy. – joran

+0

Si observa '+ .ggplot' está claro que solo puede aplicar 1 objeto coordin a la vez. Más, simplemente sobrescribe los más antiguos. – James

+0

@James sí, por supuesto. Estoy tratando de establecer lims en coord_trans, lo cual es difícil (¿no es posible?) Aunque es fácil hacer ambas cosas individualmente ... –

Respuesta

4

Esto puede ser un poco más sencillo trabajo en torno a:

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í, esto funcionará muy bien. Las garrapatas menores también están en su ubicación correcta. ¡Gracias! –

1

que tenían el mismo problema y se esforzó para resolver hasta que mirar más de cerca ?coord_trans (en v1.0.0 de ggplot2):

Uso

coord_trans (xtrans = "identidad", ytrans = "identidad", limx = NULL, cal = NULL)

para que pueda establecer las transformaciones y los límites a la misma tiempo, como este:

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

¿Utilizaría los límites dentro de la capa coord_trans los resúmenes? ¿O se aplican como una capa coord_cartesiana (es decir, limitando exclusivamente el rango mostrado)? – JMichael

Cuestiones relacionadas