17
我在一個循環中繪製幾個ggplot圖表(我知道,我知道不循環使用plyr ......但),並好奇如果有一種方法來設置小數精度說一位小數(即0.0)。我正在使用以下比例轉換。ggplot2 y軸標籤的十進制精度
p <- p + scale_y_log10()
任何幫助,將不勝感激。
我在一個循環中繪製幾個ggplot圖表(我知道,我知道不循環使用plyr ......但),並好奇如果有一種方法來設置小數精度說一位小數(即0.0)。我正在使用以下比例轉換。ggplot2 y軸標籤的十進制精度
p <- p + scale_y_log10()
任何幫助,將不勝感激。
我是那種的印象是一個小數(即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)
}
,您可以用nsmall
和digits
參數進一步發揮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))
謝謝。爲了保持軸外觀的一致性,即使數字均勻地舍入到一位小數,我也希望總是有兩位小數。有沒有辦法讓循環函數總是返回兩位小數(即round(22.50.2)返回22.5而不是22.50)? – MikeTP 2012-04-06 13:44:09
@MikeTP對不起。我認爲我的編輯解決了你的問題。 – joran 2012-04-06 18:23:40
爲什麼你有一個函數內的函數? – naught101 2012-11-22 02:51:54