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 no estilo de computador, ou seja, 4e + 05, 5e + 05, etc. Isso é obviamente inaceitável, por isso, quero exibi-los como 500.000, 400.000 e assim por diante. Obter uma notação de expoente adequada 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.
ggplot
as opções padrão como "obviamente inaceitáveis". Você quer dizer que você tem uma preferência pessoal por um formato diferente. Um número no formato4e+05
é notação científica e seria a formatação preferida em uma ampla variedade de aplicações.Respostas:
Outra opção é formatar os rótulos dos marcadores do eixo com vírgulas, usando o pacote
scales
e adicioneà sua instrução ggplot.
Se você não deseja carregar o pacote, use:
fonte
Eu também encontrei outra maneira de fazer isso que fornece a notação 'x10 (sobrescrita) 5' adequada nos eixos. Estou postando aqui na esperança de que possa ser útil para alguns. Eu peguei o código aqui e, portanto, não reivindico crédito por isso, que é o Brian Diggs.
Que você pode usar como
fonte
format(...)
linha:l <- gsub("0e\\+00","0",l)
gsub()
diretamente após oformat()
teste, enquanto testa o queformat()
retorna para o seu caso em um console separado.gsub
comando:# remove + after exponent, if exists. E.g.: (3x10^+2 -> 3x10^2)
l <- gsub("e\\+","e",l)
e depois:# convert 1x10^ or 1.000x10^ -> 10^
l <- gsub("\\'1[\\.0]*\\'\\%\\*\\%", "", l)
para torná-lo no formato geralmente usado em papéis.fonte
library(scales)
e usar ocomma
que deve funcionar melhor do que a função que eu tinha antes.Estou atrasado para o jogo aqui, mas, caso outros desejem uma solução fácil, criei um conjunto de funções que podem ser chamadas como:
que fornece números legíveis para humanos para os eixos x ou y (ou qualquer outro número em geral).
Você pode encontrar as funções aqui: Github Repo Basta copiar as funções no seu script para poder chamá-las.
fonte
Acho a resposta sugerida por Jack Aidley útil.
Eu queria jogar fora outra opção. Suponha que você tenha uma série com muitos números pequenos e deseje garantir que os rótulos dos eixos escrevam o ponto decimal completo (por exemplo, 5e-05 -> 0,0005) e, em seguida:
fonte
scale_y_continuous(labels=function(n){format(n, scientific = FALSE)})
por que não existe um formatador predefinido como esse, o inferno sabe.