2017-12-19 6 views

답변

8

여기에는 사용자 지정 변환 및 레이블 지정 기능을 수행하는 방법이 있습니다. 그것은 임의의 데이터에서 작동해야합니다. 여기

library(scales) 

ggplot(mtcars, aes(mpg, cyl)) + 
    geom_point() + 
    scale_x_continuous(
     trans = 'log2', 
     labels = trans_format('log2', math_format(2^.x))) 

, trans_format는 라벨 후 지정된 변환을 포맷합니다 :

library(ggplot2) 

label_log2 <- function(x) parse(text = paste0('2^', log(x, 2))) 

ggplot(mtcars, aes(mpg, cyl)) + 
    geom_point() + 
    scale_x_continuous(
     trans = 'log2', 
     labels = label_log2) 

enter image description here


alistaire의 의견에 따르면, 우리는 또한 scales 패키지가 제공하는 기능을 가진 축 레이블을 포맷 할 수 있습니다 . 설명서에 따르면


:

트랜스
변환 객체 이름 또는 객체 자체 어느. 내장 변환에는 "asn", "atanh", "boxcox", "exp", "identity", "log", "log10", "log1p", "log2", "logit", "확률" , "probit", "reciprocal", "reverse"및 "sqrt"가 있습니다.

변형 개체는 변환, 역방향 및 나누기 및 레이블 생성을위한 메서드를 함께 묶습니다. 변환 객체는 축척 패키지에 정의 된 이며 name_trans라고합니다. boxcox_trans. trans_new를 사용하여 고유 한 변환을 만들 수 있습니다.

trans는 또는 내장 된 변환의 이름 (scales::log2_trans에 대한 호출의 반환 값과 같은) 변환 객체이어야한다, 그래서 우리는 또한 trans = scales::log2_trans() 대신 trans = 'log2' 사용할 수 있습니다.

+0

Upvoted,하지만 하나의 인수가있는 것 같지 않습니다. 함수 호출로 전달되고 함수 이름으로 전달 된 다른 함수는 일관성이 없습니다. –

+0

@ 42- 물론, 이상하게 보입니다. '레이블'은 인수로 함수를 취할 수있는 반면,'trans'은 변환 객체에 내장 된 이름의 이름을 요구합니다. 함수 이름을 파싱하는 것은'trans'에 대해 작동하지 않습니다. 이를 반영하기 위해 답을 편집했습니다. 그리고'trans = 'log2' '를 사용하는 것이 더 낫다는 것을 알았습니다. – mt1022

+2

'scales'도 포맷터 함수를 제공합니다. 이 경우 미리 작성된 것은 아니지만 사용할 수있는 함수로 구성하는 것이 어렵지 않습니다.'labels = scales :: trans_format ('log2', scales :: math_format (2^.x)) ' – alistaire