Força R a parar de traçar rótulos de eixo abreviados - por exemplo, 1e + 00 em ggplot2

111

No ggplot2, como posso impedir que os rótulos dos eixos sejam abreviados - por exemplo, 1e+00, 1e+01ao longo do eixo x depois de plotados? Idealmente, quero forçar R a exibir os valores reais que, neste caso, seriam 1,10.

Qualquer ajuda muito apreciada.

JPD
fonte

Respostas:

134

Acho que você está procurando por isso:

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)
Uma corrida
fonte
2
Isso funcionou. Obrigado. Sem interesse, que outras opções de 'rótulo' existem para eixos em ggplot2 com o pacote de escalas?
JPD de
3
Visite também esta página ggplot2.org , foi muito útil para mim com um problema semelhante.
Marta Karas
64

Você tentou algo como:

options(scipen=10000)

antes de traçar?

Juba
fonte
3
Isso funciona definindo uma penalidade mais alta para a decisão de usar notação científica. Mais explicações nesta resposta: stackoverflow.com/a/18600721/1080804
ecoe
35

Apenas uma atualização do que o @Arun fez, já que experimentei hoje e não funcionou porque foi atualizado para

+ scale_x_continuous(labels = scales::comma)
Derek Corcoran
fonte
2
A resposta de @Arun deve funcionar bem como está, talvez você tenha se esquecido de incluir o require(scales)? Isso importa o pacote que contém a commabalança. Como você descobriu, você também pode especificar o pacote ao se referir a ele, em vez de exigi-lo de antemão.
cincodenada de
17

Como uma solução mais geral, você pode usar scales::format_formatpara remover a notação científica. Isso também lhe dá muito controle sobre como exatamente você deseja que seus rótulos sejam exibidos, ao contrário do scales::commaque faz apenas separações por vírgulas de ordens de magnitude.

Por exemplo:

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
fonte
8

Existe uma solução que não requer biblioteca de escalas.

Podes tentar:

# 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))
Willian Adamczyk
fonte
2

A solução geral mais simples não é definir a penalidade que R usa para notação científica mais alta?

ou seja, defina scipen()um número com o qual você se sinta confortável.

Por exemplo, se o máximo do eixo nos gráficos for provavelmente 100.000, a configuração scipen(200000)garantirá que R (e ggplot) usará a notação padrão para todos os números abaixo de 200.000 e não haverá necessidade de adicionar linhas à função ggplot.

Andrew Fraser
fonte
0

Estendendo a questão original para incluir frações também, ou seja, 1, 0,1, 0,01, 0,001 etc. e evitando zeros à direita

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
mdeleeuw
fonte