gpt4 book ai didi

r - 如何在R中的对数图中绘制一个圆圈?

转载 作者:行者123 更新时间:2023-12-04 22:05:50 26 4
gpt4 key购买 nike

我有一个带有两个对数轴的图。我想在情节的某个位置添加一个圆圈。我尝试使用 plotrix ,但这并没有提供“对数半径”的选项。

# data to plot
x = 10^(-1 * c(5:0))
y = x ^-1.5

#install.packages("plotrix", dependencies=T)
# use require() within functions
library("plotrix")

plot (x, y, log="xy", type="o")
draw.circle(x=1e-2, y=1e2, radius=1e1, col=2)

如何在对数对数图中添加一个圆圈?

最佳答案

正如 krlmlr 所建议的,最简单的解决方案是稍微修改 plotrix::draw.circle() 。 log-log 坐标系会扭曲线性刻度中给出的圆的坐标;为了抵消这种情况,您只需要对计算出的坐标取幂,就像我在下面代码中用 ## <- 标记的行中所做的那样:

library("plotrix")

draw.circle.loglog <-
function (x, y, radius, nv = 100, border = NULL, col = NA, lty = 1,
lwd = 1)
{
xylim <- par("usr")
plotdim <- par("pin")
ymult <- (xylim[4] - xylim[3])/(xylim[2] - xylim[1]) * plotdim[1]/plotdim[2]
angle.inc <- 2 * pi/nv
angles <- seq(0, 2 * pi - angle.inc, by = angle.inc)
if (length(col) < length(radius))
col <- rep(col, length.out = length(radius))
for (circle in 1:length(radius)) {
xv <- exp(cos(angles) * log(radius[circle])) * x[circle] ## <-
yv <- exp(sin(angles) * ymult * log(radius[circle])) * y[circle] ## <-
polygon(xv, yv, border = border, col = col[circle], lty = lty,
lwd = lwd)
}
invisible(list(x = xv, y = yv))
}

# Try it out
x = 10^(-1 * c(5:0))
y = x ^-1.5

plot (x, y, log="xy", type="o")
draw.circle.loglog(x = c(1e-2, 1e-3, 1e-4), y = c(1e2, 1e6, 1e2),
radius = c(2,4,8), col = 1:3)

关于r - 如何在R中的对数图中绘制一个圆圈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15921359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com