2012-02-10 6 views
12

Napisałem następujący kod do fabułyJak scale_y_log10 mieć znaków podziałki na 0.01,0.1,1 w 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)) 

Automatyczna skala przerwy są 10^-1,8, 10^-1.6, 10^-1.4 ... 10^-0,4. Chciałbym, aby najniższy tik był równy 0,01, a najwyższy tickmark to 1.

Dziękuję za pomoc.

Edycja: Oto jak wygląda fabuła po tym, jak wypróbowałem twój kod. enter image description here

+0

Mógłbyś dać mały przykład powtarzalne (tj danych)? Nawet jeśli po prostu wymyślisz coś, co symuluje twój problem? –

Odpowiedz

12

Użyj breaks i labels argumenty scale_y_log10 (czytaj o nich 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() 

wygląda następująco: enter image description here

Następnie zmodyfikować skalę log10 mieć niestandardowe przerwy w .01, .1 i 1, korzystają z breaks argument:

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

wygląda następująco: enter image description here

Na koniec, jeśli chcesz, aby etykiety miały również wartość 0,1, .1 i 1, użyj labels Argument:

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

Próbowałem dokładnie ten sam kod, ale tylko 0.1 pojawiło się w środku. Oto maksymalna i minimalna ilość danych. : 0.01504 Mediana: 0,03957 Mean: 0,06148 Max. : 0.43815 – Amateur

+0

Miałem inny zestaw danych, gdzie Min = 0,1 i Max = 0,7, a jedyne 0,1 pojawiło się pod koniec skali. – Amateur

+2

@TranHuynh Jeśli twoje dane mieszczą się w zakresie od 0,1 do 0,7, a Ty ręcznie ustawiłeś przerwy na 0,01, 0,1 i 1, dlaczego miałbyś oczekiwać, że zobaczysz którekolwiek z nich oprócz 0,1? Jeśli zrobiłeś to, o co poprosiłeś i dostarczyłeś powtarzalny przykład, moglibyśmy od początku powiedzieć ci, że przekazujemy 'limits = c (0,1)' na 'scale_y_log10'. Nie jesteśmy czytelnikami umysłu. – joran

14

Stosować coord_trans() zamiast skali()

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