我正在尝试在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)
答案 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))
产量:
但可能有一种标准的方法。