2014-01-11 5 views
4

로그 변환 축에 데이터를 플로팅하고 ggplot의 기본값은 눈금 레이블에 지수를 사용하는 것입니다. 그러나 눈금 레이블이 "e^n"으로 표시되도록 기본 e를 포함하고 싶습니다. 아무도 내가 이것을 어떻게 할 수 있는지 안다? 기본 10 지수 (예 : Pretty axis labels for log scale in ggplot)에 대한 솔루션을 찾을 수 있지만 기본 e에 대한 솔루션은 찾을 수 없습니다. base e 지수를 얻기 위해 base 10 솔루션을 수정하려고 시도했지만 나에게 적합하지 않습니다.ggplot2 : 기본 전자 지수로 레이블 틱

library(ggplot2) 
df <- data.frame(x=c(10, 100), y=c(400, 23000)) 
ggplot(df, aes(x=x, y=log(y)))+geom_line() 

내가

ggplot(df, aes(x=x, y=log(y)))+geom_line()+scale_y_continuous(label=scientific) 

를 사용하여 과학적인 형식의 눈금 레이블을 표현할 수 있지만 대신에이 라벨이 e^n로 표시 할 :

이 예는 기본 동작을 보여줍니다. 누구든지 여기에 올바른 방향으로 나를 가리킬 수 있습니까?

편집 : 작은 Y-범위를 사용하는 경우 디드의 솔루션은 진드기가 (대신 정수로 (예 : 전자^6.5) 소수로 다가오고있다 이와

df <- data.frame(x=c(10, 100), y=c(400, 3000)) 

으로 완벽하게 작동하지만, 예를 들어 전자^6 , e^7). 어떻게하면 ggplot이 정수 만 사용하도록 할 수 있습니까? 시도했습니다.

ggplot(df, aes(x=x, y=y))+geom_line()+ 
+  scale_y_continuous(trans="log",breaks = trans_breaks("log", function(x) exp(x), by=1), 
+      labels = trans_format("log", math_format(e^.x))) 

그러나 작동하지 않았습니다.

EDIT2 : 내가 사용 중단의 수를 설정하여이 문제를 해결 할 수 있었다 :

ggplot(df, aes(x=x, y=y))+geom_line()+ 
scale_y_continuous(trans="log",breaks = trans_breaks("log", function(x) exp(x), n=3), 
        labels = trans_format("log", math_format(e^.x))) 

답변

2

레이블 scale_y_continuos()을 사용 e^n를 가져온 다음 원하는 라벨을 얻기 위해 도서관 scales에서 trans_breaks()trans_format()을 사용합니다. 또한 로그 스케일을 사용하려면 함수 안에 trans="log" 인수를 사용하십시오 (aes() 내부의 데이터는 log()이 아닙니다).

library(scales) 
ggplot(df, aes(x=x, y=y))+geom_line()+ 
    scale_y_continuous(trans="log",breaks = trans_breaks("log", function(x) exp(x)), 
       labels = trans_format("log", math_format(e^.x))) 

enter image description here

+0

감사 디드! 이것은 큰 진일보이지만 ​​솔루션에는 사소한 문제점이 있습니까? 예를 들어 가장 낮은 y 값은 e^1.8이지만 e^6이어야합니다. 그것은 당신의 솔루션이 이미 기록 된 값의 자연 로그를 취하는 것처럼 보입니다. "로그"대신 다른 변환을 사용해야합니까? 나는 "연속"을 시도했지만 오류가 발생했습니다. 감사! – Thomas

+0

문제는 yes의 범위가 플로팅 전에 변경 되었기 때문에 aes() 내부에서 y의 log()를 가져간 경우입니다. aes()에서 log()를 제거하면 예상대로 minumim 값을 얻습니다. –

+0

감사합니다. Didzis - 알았어요. 제 실수를 봅니다. 귀하의 솔루션은 완벽하게 작동합니다! 그러나 더 작은 y 범위를 사용하면 지수가 십진수로 표시됩니다. 정밀도를 줄여야합니다.이 방법이 있습니까? 원래 게시물을 예제로 업데이트했습니다. 감사! – Thomas