Как использовать функцию для преобразования значений оси с ggplot2? - PullRequest
3 голосов
/ 28 марта 2020

Вместо 'log2' я хочу использовать 'log2 / (log2-1)'

sp <- ggplot(cars, aes(x = speed, y = dist)) + geom_point()
sp
sp + scale_x_continuous(trans='log2') +
  scale_y_continuous(trans='log2')

При попытке получить:

object 'log2/(log2-1)_trans' of mode 'function' was not found

Спасибо.

1 Ответ

3 голосов
/ 28 марта 2020

Сначала необходимо определить функцию и ее обратную сторону для маркировки, затем использовать функцию trans_new из пакета весов:

log2_1 <- function(x) log2(x)/(log2(x)-1)
antilog2_1 <- function(x) 2^(x/(x-1))

sp + scale_x_continuous(trans = trans_new("log2_1", 
                                          transform=log2_1,
                                          inverse=antilog2_1)) +
  scale_y_continuous(trans = trans_new("log2_1", 
                                       transform=log2_1,
                                       inverse=antilog2_1))

enter image description here

...