Заставьте R прекратить вывод сокращенных меток осей - например, 1e + 00 в ggplot2

111

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

Любая помощь очень ценится.

JPD
источник

Ответы:

135

Думаю, вы это ищете:

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
Это сработало. Спасибо. Интересно, какие еще параметры «меток» есть для осей в ggplot2 с пакетом scale?
JPD
3
Посетите также эту страницу ggplot2.org , это очень помогло мне с подобной проблемой.
Marta Karas
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)
user2739472
источник
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))
mdeleeuw
источник