2012-04-05 94 views
17

我在一个循环中绘制几个ggplot图表(我知道,我知道不循环使用plyr ......但),并好奇如果有一种方法来设置小数精度说一位小数(即0.0)。我正在使用以下比例转换。ggplot2 y轴标签的十进制精度

p <- p + scale_y_log10() 

任何帮助,将不胜感激。

回答

20

我是那种的印象是一个小数(即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

+0

谢谢。为了保持轴外观的一致性,即使数字均匀地舍入到一位小数,我也希望总是有两位小数。有没有办法让循环函数总是返回两位小数(即round(22.50.2)返回22.5而不是22.50)? – MikeTP 2012-04-06 13:44:09

+0

@MikeTP对不起。我认为我的编辑解决了你的问题。 – joran 2012-04-06 18:23:40

+0

为什么你有一个函数内的函数? – naught101 2012-11-22 02:51:54