Jak zmodyfikować etykietę osi X w formacie 2^x, gdy x jest w skali log2?Jak sformatować etykietę zaznaczenia osi X w formacie 2^x?
Kiedy pojawia się na wykresie, x powinno być w indeksie górnym.
Jak zmodyfikować etykietę osi X w formacie 2^x, gdy x jest w skali log2?Jak sformatować etykietę zaznaczenia osi X w formacie 2^x?
Kiedy pojawia się na wykresie, x powinno być w indeksie górnym.
Oto sposób wykonania niestandardowej funkcji transformacji i etykietowania. Powinien działać na arbitralnych danych.
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)
Według komentarza alistaire, możemy również formatowanie osi etykiety z funkcji oferowanych przez scales
opakowania:
library(scales)
ggplot(mtcars, aes(mpg, cyl)) +
geom_point() +
scale_x_continuous(
trans = 'log2',
labels = trans_format('log2', math_format(2^.x)))
Tutaj trans_format
sformatuje etykiet po określonej transformacji .
Według instrukcji:
trans
Albo nazwa obiektu transformacji, albo sam obiekt . Wbudowane transformacje obejmują "asn", "atanh", "boxcox", "exp", "identity", "log", "log10", "log1p", "log2", "logit", "prawdopodobieństwo" , "probit", "reciprocal", "reverse" i "sqrt".Obiekt transformacji łączy w sobie transformację, jest odwrotną i metody generowania podziałów i etykiet. Obiekty transformacji to zdefiniowane w pakiecie wag i nazywane są name_trans, np. boxcox_trans. Możesz stworzyć własną transformację za pomocą trans_new.
trans
powinny być przedmiotem transformacji (jak wartości zwracanej przez wywołanie scales::log2_trans
) lub imię wbudowanym transformacji, więc możemy również użyć trans = scales::log2_trans()
zamiast trans = 'log2'
.
Wycofane, ale czy nie wydaje się, że jeden argument jest przekazywane jako wywołanie funkcji, a inne przekazane jako nazwa funkcji jest niespójne? –
@ 42-, oczywiście, to wygląda dziwnie. 'labels' może przyjąć funkcję jako argument, a' trans' wymaga obiektu transformacji o nazwie wbudowanej. Parsowanie nazwy funkcji nie działa dla 'trans'. Zmieniłem odpowiedź, aby to odzwierciedlić. I uznałem, że lepiej byłoby użyć 'trans = 'log2''. – mt1022
'skale' zapewnia również funkcje formatera. W tym przypadku nie jest to jedna z wcześniej napisanych, ale nie jest trudna do skonstruowania za pomocą dostępnych funkcji: 'labels = skale :: trans_format ('log2', skale :: format matematyczny (2^.x))' – alistaire
Jeśli x jest już w skali logarytmicznej, wystarczy zmodyfikować etykiety, np. df <- data.frame (x = 1: 4, y = 1: 4); ggplot (df) + geom_point (aes (y = y, x = x)) + scale_x_continuous (labels = paste0 ("2 ^", 1: 4)) –