Примушуйте R зупиняти створення графіків скорочених осей - наприклад, 1e + 00 в ggplot2


111

Як в ggplot2 як я можу зупинити скорочення міток осі - наприклад, 1e+00, 1e+01вздовж графічної осі x? В ідеалі я хочу змусити R відобразити фактичні значення, які в цьому випадку були б 1,10.

Будь-яка допомога дуже цінується.

Відповіді:


134

Я думаю, ти шукаєш цього:

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
Це спрацювало. Дякую. З іншого боку, які ще варіанти "label" є для осей ggplot2 із пакетом масштабів?
JPD

3
Будь ласка, відвідайте також цю сторінку ggplot2.org , мені це дуже допомогло з подібною проблемою.
Марта Карась

64

Ви спробували щось на кшталт:

options(scipen=10000)

перед тим, як скласти графік?


3
Це спрацьовує, встановлюючи більш високий штраф за рішення використовувати наукові позначення. Більше пояснення у відповідь: stackoverflow.com/a/18600721/1080804
ECOE

35

Просто оновлення того, що зробив @Arun, оскільки я спробував це сьогодні, і це не вийшло, тому що це було актуалізовано

+ scale_x_continuous(labels = scales::comma)

2
@ Відповідь Аруна повинна спрацювати нормально, як це, можливо, ви нехтували включенням require(scales)? Це імпортує пакет, який містить commaмасштаб. Як ви виявили, ви також можете вказати пакунок, посилаючись на нього, замість того, щоб вимагати його заздалегідь.
cincodenada

17

Як більш загальне рішення, ви можете використовувати scales::format_formatдля видалення наукових позначень. Це також дає вам багато контролю над тим, як саме ви хочете, щоб ваші ярлики відображалися, на відміну від того, scales::commaщо відбувається лише розділення комами порядків величини.

Наприклад:

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

Є рішення, яке не потребує бібліотеки масштабів.

Ви можете спробувати:

# 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

Хіба не найпростіше загальне рішення встановити вищу штраф, яку R використовує для наукових позначень?

тобто встановити scipen()число, яке вам зручно.

Наприклад, якщо ваш максимум осі на діаграмах, ймовірно, буде 100 000, встановлення scipen(200000)забезпечить, що R (і ggplot) будуть використовувати стандартні позначення для всіх чисел нижче 200000 і не буде необхідності додавати рядки до функції ggplot.


0

Розширення оригінального запитання, щоб також містити дроби, тобто 1, 0,1, 0,01, 0,001 і т.д.

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.