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.

JPD
la source

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)
Arun
la source
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?

Juba
la source
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)
Derek Corcoran
la source
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)
user2739472
la source
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))
Willian Adamczyk
la source
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.

Andrew Fraser
la source
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))
mdeleeuw
la source