灵活的log10网格与ggplot2

时间:2015-12-23 13:44:37

标签: r ggplot2

我正在尝试在ggplot2中制作灵活的log10-grid。这个想法是在0.1-1之间,网格线间距为0.1,在1-10之间,它们相隔1,在10-100之间,它们相隔10,等等。

这样,基于具有数据i供应的变量向量(CAfails),网格线根据需要重复相同的模式。这是经过大量调整后我想出的:

node {
    git url: src, branch: 'master'
}

之后我将它传递给ggplot2:

CAfails<-data.frame(c(2.5,5.8,10.7,16.2,23,36.2,45.3,49.5,70.1,80.3,83.6,90))

LOG.as<-c(t((10^((floor(log10(min(CAfails)))-1):ceiling(log10(max(CAfails)))))%o%c(1:10)))
LOG.as<-LOG.as[-10*((floor(log10(min(CAfails))):ceiling(log10(max(CAfails))))+1)]

它运作正常,但我想知道是否有更简单,更简单的方法来做到这一点

这是一个完整的例子:

scale_x_log10(limits=c(1,10^(ceiling(log10(max(CAfails))))),breaks=LOG.as)
scale_y_log10(limits=c(0.1,10^(ceiling(log10(max(CAfails))))),breaks=LOG.as)

产生这个: enter image description here

1 个答案:

答案 0 :(得分:1)

我认为这样做效果更好:

CAfails<-data.frame(x=c(2.5,5.8,10.7,16.2,23,36.2,45.3,49.5,70.1,80.3,83.6,90))

pdf$x <- 1:nrow(CAfails)
pdf$y <- CAfails$x

genbreaks <- function(x){
  # only works on positive vals

  minx <- min(x)
  maxx <- max(x)
  flminx <- floor(log10(minx))
  clmaxx <- ceil(log10(maxx))

  rv <- c()
  xlo <- 10^flminx
  for (i in flminx:clmaxx) {
    rv <- c(rv,seq(xlo,xlo*10,xlo))
    xlo <- xlo*10
  }
  return(rv)
}


ggplot(data=pdf,aes(x,y)) + geom_point(color="blue") +
  scale_x_log10(breaks=genbreaks(pdf$x)) +
  scale_y_log10(breaks=genbreaks(pdf$y))

产量:

enter image description here

但可能有一种标准的方法。