2012-01-19 11 views
10

Mam niektóre dane, które wykazują związek geometryczny, ale mają wartości odstające. Na przykład:Nie można ustawić wartości granicznych za pomocą 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

chciałbym wykreślić to za pomocą dziennika transformacji i jednocześnie powiększony o część danych. Wiem, że mogę wykonać pierwszą część z coord_trans(y='log10') lub drugą częścią z coord_cartesian(ylim=c(2,8)), ale nie udało mi się ich połączyć. Muszę też zachować te punkty, więc po prostu przycinanie ich za pomocą scale_y_continuous(limits=c(2,8)) nie będzie działać dla mnie.

Czy jest jakiś sposób na osiągnięcie tego celu bez konieczności uciekania się do następującego strasznego ataku hakerskiego? Może nieudokumentowany sposób na przekazanie limitów do 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

Mój zły. Myślałem, że to rozwiązałem, ale nie myślę dziś wprost. – joran

+0

Jeśli spojrzysz na '+ .ggplot', to jasne, że możesz zastosować tylko 1 obiekt proto koordynujący naraz. Dosyć więcej tylko nadpisuj starsze. – James

+0

@ James oczywiście. Próbuję ustawić lims w coord_trans, co jest trudne (niemożliwe?), Chociaż łatwo jest je wykonywać zarówno indywidualnie ... –

Odpowiedz

4

To może być nieco prostsze obejście:

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

Tak, to będzie dobrze działać. Drobne znaczniki są również w ich prawidłowej lokalizacji. Dzięki! –

1

miałem ten sam problem i starały się rozwiązać go aż uważniej przyjrzeć ?coord_trans (w wersji 1.0.0 ggplot2):

Wykorzystanie

coord_trans (xtrans = "tożsamość", ytrans = "tożsamość", LIMx = NULL, wapienny = NULL)

więc można ustawić przekształceń i granice w tym samym czas taki jak ten:

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

Czy użycie limitów wewnątrz warstwy coord_trans wpływa na podsumowania? Czy też stosują się jak warstwa koordynacyjna (tj. Czysto ograniczająca wyświetlany zakres)? – JMichael

Powiązane problemy