我有一个对数图,在 y 轴上显示从 1 到 7 的刻度线。我想获得函数的每个刻度线之间的间隔。
> par("yaxp")
[1] 1 7 -6
我期待 par("yaxp")[3] 为 1。
为什么是-6?如何让 R 返回刻度线之间的间隔?
这肯定与它是对数刻度的事实有关
从?par
文档中:
xaxp - c(x1, x2, n) 形式的向量,当 par("xlog") 为假时,给出极端刻度线的坐标和刻度线之间的间隔数。否则,当日志坐标处于活动状态时,这三个值具有不同的含义:对于小范围,n 为负数,刻度与线性情况相同,否则,n 为 1:3,指定一个案例编号,以及x1 和 x2 是用户坐标内 10 的最低和最高幂,10 ^ par("usr")[1:2]。(“usr”坐标在这里进行了 log10 转换!)
看:
x<-1:100
y<-1:100
plot(x,y,log="y")
par("yaxp")
par("ylog")
相比
plot(log(x),log(y))
par("ylog")
par("yaxp")
如其他帮助中所述,使用 log 时的含义xaxp
略有不同。但是在这里,由于 n 是负数,我们仍然处于线性情况。在其他作品中,台阶之间的距离是
(1-7)/(-6) = 1
您可以使用axTicks
获取内部使用的刻度axes
来绘制刻度。这里有一个在 的帮助下修改的示例,向您展示的不同axTicks
值n
op <- par(mfrow = c(4, 1))
for(x in 9999 * c(1/99999,1, 2, 8)) {
plot(x, 9, log = "x")
cat(formatC(par("xaxp"), width = 5),";", T <- axTicks(1),"\n")
rug(T, col = adjustcolor("red", 0.5), lwd = 4)
}
par(op)
## n negative (your case): linear case
0.05 0.25 -4 ; 0.05 0.1 0.15 0.2 0.25
## n =3 : k 10^j with k in {1,2,5} & j in par("usr")[1:2]
1000 1e+05 3 ; 200 500 1000 2000 5000 10000 20000 50000 1e+05 2e+05 5e+05
## n =2 k 10^j with k in {1,5} & j in par("usr")[1:2]
1000 1e+06 2 ; 500 1000 5000 10000 50000 1e+05 5e+05 1e+06
## n =1 : 10^j with j in par("usr")[1:2]
1000 1e+07 1 ; 1000 10000 1e+05 1e+06 1e+07