Forcer R à arrêter le traçage des étiquettes d'axes abrégées - par exemple 1e + 00 dans ggplot2


111

Dans ggplot2, comment puis-je empêcher les étiquettes d'axe d'être abrégées - par exemple le 1e+00, 1e+01long de l'axe des x une fois tracées? Idéalement, je veux forcer R à afficher les valeurs réelles qui dans ce cas seraient 1,10.

Toute aide très appréciée.

Réponses:


135

Je pense que vous recherchez ceci:

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
Cela a fonctionné. Je vous remercie. Par intérêt, quelles sont les autres options «d'étiquette» pour les axes dans ggplot2 avec le package scale?
JPD

3
S'il vous plaît visitez également cette page ggplot2.org , cela m'a été très utile avec un problème similaire.
Marta Karas

64

Avez-vous essayé quelque chose comme:

options(scipen=10000)

avant de tracer?


3
Cela fonctionne en fixant une pénalité plus élevée pour avoir décidé d'utiliser la notation scientifique. Plus d'explications dans cette réponse: stackoverflow.com/a/18600721/1080804
ecoe

35

Juste une mise à jour de ce que @Arun a fait, depuis que je l'ai essayé aujourd'hui et cela n'a pas fonctionné car il a été actualisé pour

+ scale_x_continuous(labels = scales::comma)

2
La réponse de @ Arun devrait bien fonctionner telle quelle, peut-être avez-vous négligé d'inclure le require(scales)? Cela importe le package qui contient la commabalance. Comme vous l'avez découvert, vous pouvez également spécifier le package lorsque vous vous y référez au lieu de l'exiger au préalable.
cincodenada

17

Comme solution plus générale, vous pouvez utiliser scales::format_formatpour supprimer la notation scientifique. Cela vous donne également beaucoup de contrôle sur la façon dont vous souhaitez que vos étiquettes soient affichées, par opposition aux scales::commaséparations par virgules des ordres de grandeur.

Par exemple:

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)

8

Il existe une solution qui ne nécessite pas de bibliothèque de balances.

Tu peux essayer:

# 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

La solution générale la plus simple n'est-elle pas de fixer la pénalité que R utilise pour la notation scientifique plus élevée?

c'est- scipen()à- dire défini sur un nombre avec lequel vous êtes à l'aise.

Par exemple, si le maximum de votre axe sur les graphiques est probablement de 100 000, le réglage scipen(200000)garantira que R (et ggplot) utilisera la notation standard pour tous les nombres inférieurs à 200000 et il ne sera pas nécessaire d'ajouter des lignes à la fonction ggplot.


0

Étendre la question d'origine pour inclure également les fractions, c'est-à-dire 1, 0,1, 0,01, 0,001, etc. et éviter les zéros de fin

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.