ggplot facet轴标签中的智能小数位数

时间:2014-02-17 13:07:54

标签: r ggplot2

我有一个像ggplot这样的分面:

library(ggplot2)
grid <- seq(-10,10,length.out=1000)
df <- data.frame(x=rep(grid,2),y=c(grid^2,100+grid^2/100000000),group=rep(c(1,2),each=length(grid)))
ggplot(df,aes(x,y)) + geom_line() + facet_wrap(~group,scales='free')

问题是第2组的y轴值全部相同,因为它们仅在第6-7位小数中不同。所以我试过

fmt <- function(){
  function(x) format(x,nsmall = 7,scientific = FALSE)
}
ggplot(df,aes(x,y)) + geom_line() + facet_wrap(~group,scales='free') + scale_y_continuous(labels = fmt())

但是为第一组添加了许多不必要的小数(呃!)。

有没有办法让ggplot显示,但是y轴上的值需要多个小数位才能对所有方面都有所不同?或者在这里用gridExtra手动执行此操作?

1 个答案:

答案 0 :(得分:6)

这似乎有效:

fmt <- function(){
  function(x) {
    d <- log10(min(diff(x)))
    if(d < 0) format(x,nsmall = abs(round(d)),scientific = FALSE) else x
  }
}
ggplot(df,aes(x,y)) + geom_line() + 
    facet_wrap(~group,scales='free') + scale_y_continuous(labels = fmt())

enter image description here