Comment puis-je changer le formatage des nombres sur un axe avec ggplot?

J'utilise R et ggplot pour dessiner un nuage de points de certaines données, tout va bien sauf que les nombres sur l'axe des y sortent avec un formatage exposant de style informatique, c'est-à-dire 4e+05, 5e+05, etc. C'est évidemment inacceptable, donc je veux l'obtenir pour les afficher comme 500 000, 400 000, et ainsi de suite. Obtenir une notation d'exposant appropriée serait également acceptable.

Le code de la parcelle est le suivant:

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")

Toute aide très appréciée.

93
demandé sur Jack Aidley 2012-07-23 13:33:09

5 réponses

Une autre option consiste à formater vos étiquettes de tick d'axe avec des virgules en utilisant le package scales, et ajouter

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

À votre déclaration ggplot.

Si vous ne voulez pas charger le paquet, utilisez:

scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = scales::comma)
89
répondu Jim M. 2017-07-12 12:41:37

J'ai aussi trouvé une autre façon de le faire qui donne la notation 'x10(exposant)5' appropriée sur les axes. Je le poste ici dans l'espoir que cela pourrait être utile à certains. J'ai obtenu le code de ici donc je ne revendique aucun crédit pour cela, cela va à juste titre à 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)
}

Que vous pouvez ensuite utiliser comme

ggplot(data=df, aes(x=x, y=y)) +
   geom_point() +
   scale_y_continuous(labels=fancy_scientific) 
43
répondu Jack Aidley 2014-06-16 10:48:27
x <- rnorm(10) * 100000
y <- seq(0, 1, length = 10)
p <- qplot(x, y)
library(scales)
p + scale_x_continuous(labels = comma)
39
répondu DiscreteCircle 2012-07-23 12:20:04

Je suis en retard au jeu ici mais dans le cas où d'autres veulent une solution facile, j'ai créé un ensemble de fonctions qui peuvent être appelées comme:

 ggplot + scale_x_continuous(labels = human_gbp)

Qui vous donnent des nombres lisibles par l'homme pour les axes x ou y (ou n'importe quel nombre en général vraiment).

Vous pouvez trouver les fonctions ici: dépôt Github Il suffit de copier les fonctions dans votre script afin que vous puissiez les appeler.

13
répondu Feargal Ryan 2017-03-13 10:13:40

Je trouve la réponse suggérée par Jack Aidley utile.

, je voulais jeter une autre option. Supposons que vous ayez une série avec beaucoup de petits nombres, et que vous vouliez vous assurer que les étiquettes d'axe écrivent le point décimal complet (par exemple 5e-05 - > 0,0005), alors:

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) 
7
répondu EconomiCurtis 2015-03-15 20:41:06