I am plotting several ggplot charts in a loop (i know, i know don't loop use plyr...but) and was curious if there was a way to set the decimal precision to say one decimal (i.e. 0.0). I am using the following scale transformation.
p <- p + scale_y_log10()
Any help would be appreciated.
I was kind of under the impression that one decimal (i.e 1.2) was the default, but if you're seeing more decimal places than that, you can pass your own formatting to the scale:
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))
}
And then add the scale to your plot:
ggplot( ... ) + scale_y_log10(labels = fmt_dcimals(2))
Now that I think about this, I should add that if you're really going to write your own formatter, you should probably stick to using the format
function to do the work, rather than rounding and coercing. That's probably safer and "nicer".
As an example, to force two digits after the decimal, you could change this formatting function to something like this:
fmt_dcimals <- function(decimals=0){
function(x) format(x,nsmall = decimals,scientific = FALSE)
}
and you can further play with the nsmall
and digits
arguments to format
to get what you want, I think. An example of it's use:
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))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With