2012-04-05 95 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