Zmusza R do zatrzymania kreślenia skróconych etykiet osi - np. 1e + 00 w ggplot2


111

W ggplot2 jak mogę zatrzymać skracanie etykiet osi - np. 1e+00, 1e+01Wzdłuż osi x po wydrukowaniu? Idealnie chciałbym zmusić R do wyświetlenia rzeczywistych wartości, które w tym przypadku byłyby 1,10.

Każda pomoc bardzo doceniona.

Odpowiedzi:


135

Myślę, że szukasz tego:

require(ggplot2)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))
# displays x-axis in scientific notation
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p

# displays as you require
require(scales)
p + scale_x_continuous(labels = comma)

2
To zadziałało. Dziękuję Ci. Poza tym, jakie są inne opcje „etykiet” dla osi w ggplot2 z pakietem skal?
JPD

3
Zapraszam również do odwiedzenia tej strony ggplot2.org , była mi bardzo pomocna w podobnym problemie.
Marta Karas


35

To tylko aktualizacja tego, co zrobił @Arun, ponieważ wypróbowałem go dzisiaj i nie zadziałało, ponieważ został zaktualizowany do

+ scale_x_continuous(labels = scales::comma)

2
Odpowiedź @ Arun powinna działać dobrze tak, jak jest, być może zapomniałeś dołączyć require(scales)? Spowoduje to zaimportowanie pakietu zawierającego commaskalę. Jak odkryłeś, możesz również określić pakiet podczas odwoływania się do niego, zamiast wymagać go wcześniej.
cincodenada

17

Bardziej ogólnym rozwiązaniem scales::format_formatjest usunięcie notacji naukowej. Daje to również dużą kontrolę nad tym, jak dokładnie chcesz wyświetlać etykiety, w przeciwieństwie doscales::comma co ma miejsce tylko w przypadku oddzielania rzędów wielkości przecinkami.

Na przykład:

require(ggplot2)
require(scales)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))

# Here we define spaces as the big separator
point <- format_format(big.mark = " ", decimal.mark = ",", scientific = FALSE)

# Plot it
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p + scale_x_continuous(labels = point)

8

Istnieje rozwiązanie, które nie wymaga biblioteki wag.

Możesz spróbować:

# To deactivate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = TRUE))

# To deactivate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = TRUE))

2

Czy najprostszym ogólnym rozwiązaniem nie jest wyższe określenie kary, której używa R dla notacji naukowej?

tj. ustawić scipen()na liczbę, z którą czujesz się komfortowo.

Np. jeśli maksymalna oś na wykresach może wynosić 100 000, ustawienie scipen(200000)zapewni, że R (i ggplot) użyje standardowej notacji dla wszystkich liczb poniżej 200000 i nie będzie wymogu dodawania żadnych linii do funkcji ggplot.


0

Rozszerzenie pierwotnego pytania o ułamki, np. 1, 0,1, 0,01, 0,001 itd. I unikanie końcowych zer

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.