ero un po 'l'impressione che un decimale (ad esempio 1,2) è stato il default, ma se stai vedendo posti più decimali di questo, si può passare la propria formattazione alla scala:
fmt_dcimals <- function(decimals=0){
# return a function responpsible for formatting the
# axis labels with a given number of decimals
function(x) as.character(round(x,decimals))
}
E quindi aggiungere la scala al vostro diagramma:
ggplot(...) + scale_y_log10(labels = fmt_dcimals(2))
Ora che penso a questo, devo aggiungere che se siete veramente intenzione di scrivere il proprio formattatore, probabilmente si dovrebbe attenersi a utilizzando la funzione di format
fai il lavoro, piuttosto che arrotondare e forzare. Probabilmente è più sicuro e "più bello".
A titolo di esempio, per costringere due cifre dopo la virgola, è possibile modificare la funzione di formattazione a qualcosa di simile:
fmt_dcimals <- function(decimals=0){
function(x) format(x,nsmall = decimals,scientific = FALSE)
}
e si può inoltre giocare con gli argomenti nsmall
e digits
per format
per ottenere ciò che vuoi, penso. Un esempio del suo utilizzo:
df <- data.frame(x = 1:5,y = rexp(5))
ggplot(df,aes(x = x,y=y)) +
geom_point() +
scale_y_log10(labels = fmt_dcimals(2))

Grazie. Per coerenza nell'aspetto degli assi, vorrei avere sempre due decimali anche se il numero arrotonda uniformemente a un decimale. C'è un modo per fare in modo che la funzione round restituisca sempre due decimali (ad esempio round (22,50,2) restituisce 22,5 invece di 22,50)? – MikeTP
@MikeTP Ci scusiamo per il ritardo. Penso che la mia modifica indirizzi la tua domanda. – joran
perché hai una funzione all'interno di una funzione? – naught101