Erzwingen Sie R, um das Zeichnen abgekürzter Achsenbeschriftungen zu beenden - z. B. 1e + 00 in ggplot2

111

Wie kann ich in ggplot2 verhindern, dass Achsenbeschriftungen abgekürzt werden - z. B. 1e+00, 1e+01entlang der x-Achse, sobald sie gezeichnet wurden? Idealerweise möchte ich R zwingen, die tatsächlichen Werte anzuzeigen, die in diesem Fall vorliegen würden 1,10.

Jede Hilfe sehr geschätzt.

JPD
quelle

Antworten:

135

Ich denke du suchst das:

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
quelle
2
Das hat funktioniert. Danke dir. Welche anderen 'Label'-Optionen gibt es aus Interesse für Achsen in ggplot2 mit dem Waagenpaket?
JPD
3
Bitte besuchen Sie auch diese Seite von ggplot2.org , sie war für mich bei einem ähnlichen Problem sehr hilfreich.
Marta Karas
64

Hast du so etwas versucht wie:

options(scipen=10000)

vor dem Plotten?

Juba
quelle
3
Dies funktioniert, indem eine höhere Strafe für die Entscheidung für die Verwendung der wissenschaftlichen Notation festgelegt wird. Weitere Erklärungen in dieser Antwort: stackoverflow.com/a/18600721/1080804
ecoe
35

Nur ein Update zu dem, was @Arun gemacht hat, da ich es heute ausprobiert habe und es nicht funktioniert hat, weil es aktualisiert wurde

+ scale_x_continuous(labels = scales::comma)
Derek Corcoran
quelle
2
@ Aruns Antwort sollte so wie sie ist gut funktionieren, vielleicht haben Sie es versäumt, das einzuschließen require(scales)? Dadurch wird das Paket importiert, das die commaWaage enthält . Wie Sie festgestellt haben, können Sie das Paket auch angeben, wenn Sie darauf verweisen, anstatt es vorher zu benötigen.
Cincodenada
17

Als allgemeinere Lösung können Sie scales::format_formatdie wissenschaftliche Notation entfernen. Auf diese Weise können Sie auch steuern, wie genau Ihre Beschriftungen angezeigt werden sollen, im Gegensatz dazu scales::commanur Komma-Trennungen in Größenordnungen.

Beispielsweise:

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
quelle
8

Es gibt eine Lösung, für die keine Skalenbibliothek erforderlich ist.

Du kannst es versuchen:

# 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
quelle
2

Ist nicht die einfachste allgemeine Lösung, um die Strafe, die R für die wissenschaftliche Notation verwendet, höher zu setzen?

dh scipen()auf eine Zahl einstellen , mit der Sie vertraut sind.

Beispiel: Wenn Ihr Achsenmaximum in Diagrammen wahrscheinlich 100 000 beträgt, scipen(200000)wird durch die Einstellung sichergestellt, dass R (und ggplot) für alle Zahlen unter 200000 die Standardnotation verwenden und der ggplot-Funktion keine Linien hinzugefügt werden müssen.

Andrew Fraser
quelle
0

Erweiterung der ursprünglichen Frage auf Brüche, dh 1, 0,1, 0,01, 0,001 usw., und Vermeidung von nachgestellten Nullen

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
mdeleeuw
quelle