estaba un poco bajo la impresión de que un decimal (por ejemplo 1.2) fue el valor por defecto, pero si usted está viendo más lugares decimales que eso, usted puede pasar su propio formato de la escala:
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))
}
Y a continuación, añadir la escala a su terreno:
ggplot(...) + scale_y_log10(labels = fmt_dcimals(2))
Ahora que pienso en esto, debo añadir que si usted está realmente va a escribir su propio formateador, probablemente debe pegarse a la utilización de la función de format
hacer el trabajo, en lugar de redondear y coaccionar. Eso es probablemente más seguro y "más agradable".
A modo de ejemplo, para obligar a dos dígitos después del punto decimal, que podría cambiar esta función formato a algo como esto:
fmt_dcimals <- function(decimals=0){
function(x) format(x,nsmall = decimals,scientific = FALSE)
}
y se puede jugar más con los nsmall
y digits
argumentos a format
para conseguir lo tu quieres, creo. Un ejemplo de su uso:
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))

Gracias. Por consistencia en la apariencia del eje, me gustaría tener siempre dos decimales, incluso si el número se redondea de manera uniforme a un decimal. ¿Hay alguna manera de hacer que la función de ronda siempre devuelva dos decimales (es decir, ronda (22.50,2) devuelve 22.5 en lugar de 22.50)? – MikeTP
@MikeTP Disculpa la demora. Creo que mi edición responde a tu pregunta. – joran
¿por qué tienes una función dentro de una función? – naught101