我正在使用循环绘制几个ggplot图表(我知道不应该用循环,应该使用plyr...但是)我想知道是否有一种方法可以将小数精度设置为例如一位小数(即0.0)。我正在使用以下比例转换。
p <- p + scale_y_log10()
希望能得到任何帮助。
我原本认为一个小数点后一位(即1.2)是默认值,但如果你看到了更多的小数位数,你可以通过设置scale参数来指定格式:
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))
scale_*
函数的labels
参数接受一个_函数_作为值。在相关的scales包中,您会找到许多格式化函数,实际上返回用于格式化标签的函数。简而言之,将其包装在fmt()
中使得我们在scale_*
中的代码比将整个函数作为scale_*
的参数写出来更加简洁。 - joranfmt<-function(x){format(x,nsmall = 2,scientific = FALSE)} ; ggplot(df,aes(x = x,y=y)) + scale_y_log10(labels = fmt)
?(请注意,scale调用中缺少()
)。它完全做同样的事情,但直接将函数传递给ggplot,而不是传递一个传递函数的函数。 - naught101date_format
。如果我们像你描述的那样做,我们如何传递不同的日期格式呢?现在考虑一个更复杂的例子,比如math_format
。所以我只是遵循传统格式,仅此而已。 - joran