ggplot2 y轴标签小数精度

时间:2012-04-05 20:48:18

标签: r ggplot2

我正在循环中绘制几个ggplot图表(我知道,我知道不要循环使用plyr ...但是)并且很奇怪是否有办法将小数精度设置为一个小数(即0.0) 。我正在使用以下比例转换。

p <- p + scale_y_log10()

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:22)

我觉得有一个十进制(即1.2)是默认值,但是如果你看到的小数位数多于这个,你可以将自己的格式传递给比例:

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))
}

然后将比例添加到你的情节中:

ggplot( ... ) + scale_y_log10(labels = fmt_dcimals(2))

现在我想到这一点,我应该补充一点,如果你真的要编写自己的格式化程序,你应该坚持使用format函数来完成工作,而不是舍入和强制。这可能更安全,更“好”。

例如,要在小数点后强制两位数,您可以将此格式化功能更改为以下内容:

fmt_dcimals <- function(decimals=0){
    function(x) format(x,nsmall = decimals,scientific = FALSE)
}

您可以进一步使用nsmalldigits format参数来获取您想要的内容。它的一个例子是:

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))

enter image description here