Forza R per interrompere il tracciamento delle etichette abbreviate degli assi, ad esempio 1e + 00 in ggplot2


111

In ggplot2 come posso impedire che le etichette degli assi vengano abbreviate, ad esempio 1e+00, 1e+01lungo l'asse x una volta tracciate? Idealmente, voglio forzare R per visualizzare i valori effettivi che in questo caso sarebbero 1,10.

Qualsiasi aiuto molto apprezzato.

Risposte:


134

Penso che tu stia cercando questo:

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
Questo ha funzionato. Grazie. Per interesse, quali altre opzioni di 'etichetta' ci sono per gli assi in ggplot2 con il pacchetto scale?
JPD

3
Visita anche questa pagina ggplot2.org , mi è stata molto utile con un problema simile.
Marta Karas

64

Hai provato qualcosa come:

options(scipen=10000)

prima di tracciare?


3
Funziona impostando una penalità più alta per aver deciso di utilizzare la notazione scientifica. Più spiegazione in questa risposta: stackoverflow.com/a/18600721/1080804
ecoe

35

Solo un aggiornamento a quello che ha fatto @Arun, dato che l'ho provato oggi e non ha funzionato perché era stato realizzato

+ scale_x_continuous(labels = scales::comma)

2
@ La risposta di Arun dovrebbe funzionare bene così com'è, forse hai trascurato di includere il require(scales)? Questo importa il pacchetto che contiene la commabilancia. Come hai scoperto, puoi anche specificare il pacchetto quando fai riferimento ad esso invece di richiederlo in anticipo.
cincodenada

17

Come soluzione più generale, puoi utilizzare scales::format_formatper rimuovere la notazione scientifica. Questo ti dà anche un sacco di controllo su come esattamente desideri che le tue etichette vengano visualizzate, al contrario di ciò scales::commache fa solo le separazioni con virgole degli ordini di grandezza.

Per esempio:

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

C'è una soluzione che non richiede la libreria delle bilance.

Puoi provare:

# 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 soluzione generale più semplice per impostare la penalità che R usa per la notazione scientifica non è più alta?

cioè impostato scipen()su un numero con cui ti senti a tuo agio.

Ad esempio, se il massimo dell'asse sui grafici è probabile che sia 100 000, l'impostazione scipen(200000)assicurerà che R (e ggplot) utilizzerà la notazione standard per tutti i numeri inferiori a 200000 e non sarà necessario aggiungere alcuna riga alla funzione ggplot.


0

Estendere la domanda originale fino a comprendere anche le frazioni, ad esempio 1, 0,1, 0,01, 0,001 ecc. Ed evitare gli zeri finali

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.