【发布时间】:2012-04-05 20:48:18
【问题描述】:
我正在一个循环中绘制几个 ggplot 图表(我知道,我知道不循环使用 plyr ......但是)并且很好奇是否有一种方法可以将小数精度设置为一个小数(即 0.0) .我正在使用以下比例转换。
p <- p + scale_y_log10()
任何帮助将不胜感激。
【问题讨论】:
我正在一个循环中绘制几个 ggplot 图表(我知道,我知道不循环使用 plyr ......但是)并且很好奇是否有一种方法可以将小数精度设置为一个小数(即 0.0) .我正在使用以下比例转换。
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)
}
我认为,您可以进一步使用format 的nsmall 和digits 参数来获得您想要的东西。它的使用示例:
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))
【讨论】:
fmt<-function(x){format(x,nsmall = 2,scientific = FALSE)} ; ggplot(df,aes(x = x,y=y)) + scale_y_log10(labels = fmt)? (注意在规模调用中缺少())。它做的事情完全一样,但是它直接将函数传递给ggplot,而不是传递一个传递函数的函数。
date_format。如果我们按照您所描述的那样做,我们如何传递不同的日期格式?现在考虑一个更复杂的例子,比如math_format。所以我只是坚持使用传统格式,仅此而已。