ggplot2 y轴标签的十进制精度
问题描述:
我在一个循环中绘制几个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