Como faço para alterar a formatação de números em um eixo com ggplot?

Eu estou usando R e ggplot para desenhar um gráfico de dispersão de alguns dados, tudo está bem, exceto que os números no eixo y estão saindo com formatação de expoente de estilo de computador, ou seja, 4e + 05, 5e + 05, etc. inaceitável, então eu quero que ele seja exibido como 500.000, 400.000 e assim por diante. Obter uma notação expoente apropriada também seria aceitável.

O código para o gráfico é o seguinte:

p <- ggplot(valids, aes(x=Test, y=Values)) + geom_point(position="jitter") + facet_grid(. ~ Facet) + scale_y_continuous(name="Fluorescent intensity/arbitrary units") + scale_x_discrete(name="Test repeat") + stat_summary(fun.ymin=median, fun.ymax=median, fun.y=median, geom="crossbar") 

Qualquer ajuda muito apreciada.

Outra opção é formatar seus labels de marcação de eixo com vírgulas usando as scales pacote e adicionar

  scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = comma) 

para sua declaração ggplot.

Se você não quiser carregar o pacote, use:

 scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = scales::comma) 

Eu também encontrei uma outra maneira de fazer isso que dá a notação ‘x10 (sobrescrito)’ nos eixos. Estou postando aqui na esperança de que possa ser útil para alguns. Eu tenho o código daqui, então eu não reivindico nenhum crédito por isso, que com razão vai para Brian Diggs.

 fancy_scientific <- function(l) { # turn in to character string in scientific notation l <- format(l, scientific = TRUE) # quote the part before the exponent to keep all the digits l <- gsub("^(.*)e", "'\\1'e", l) # turn the 'e+' into plotmath format l <- gsub("e", "%*%10^", l) # return this as an expression parse(text=l) } 

Qual você pode então usar como

 ggplot(data=df, aes(x=x, y=y)) + geom_point() + scale_y_continuous(labels=fancy_scientific) 
 x <- rnorm(10) * 100000 y <- seq(0, 1, length = 10) p <- qplot(x, y) library(scales) p + scale_x_continuous(labels = comma) 

Estou atrasado para o jogo aqui, mas no caso de outros querem uma solução fácil, criei um conjunto de funções que podem ser chamadas como:

  ggplot + scale_x_continuous(labels = human_gbp) 

que lhe dão números legíveis para os eixos x ou y (ou qualquer número em geral, na verdade).

Você pode encontrar as funções aqui: Github Repo Apenas copie as funções para o seu script para que você possa chamá-las.

Acho que a resposta sugerida por Jack Aidley é útil.

Eu queria jogar outra opção. Suponha que você tenha uma série com muitos números pequenos e queira garantir que os labels dos eixos gravem o ponto decimal completo (por exemplo, 5e-05 -> 0.0005), então:

 NotFancy <- function(l) { l <- format(l, scientific = FALSE) parse(text=l) } ggplot(data = data.frame(x = 1:100, y = seq(from=0.00005,to = 0.0000000000001,length.out=100) + runif(n=100,-0.0000005,0.0000005)), aes(x=x, y=y)) + geom_point() + scale_y_continuous(labels=NotFancy)