您需要将形状分为四个部分,以避免连接曲线的左右部分,这就是导致白线的原因。
此外,您可以使用表达式在注释中获得更好的数学符号:
x_left <- seq(-5, -1, by = 0.01)
x_right <- seq(1, 5, 0.01)
y.upper_left <- sqrt(3*(x_left^2 - 1))
y.upper_right <- sqrt(3*(x_right^2 - 1))
y.lower_left <- -sqrt(3*(x_left^2 - 1))
y.lower_right <- -sqrt(3*(x_right^2 - 1))
y.max <- max(y.upper_left)
y.min <- min(y.lower_left)
plot(c(-5, 5), c(y.min, y.max), type = "n", xlab = "x", ylab = "y")
lines(x_left, y.upper_left)
lines(x_right, y.upper_right)
lines(x_left, y.lower_left)
lines(x_right, y.lower_right)
abline(0, sqrt(3))
abline(0, -sqrt(3))
points(2, 0)
points(-2,0)
text(2, 0, "focus (2, 0)", pos=4)
text(5, y.max, expression(paste("asymptote y =") ~ sqrt(3)*x), pos = 2)
title(expression(paste("The hyperbola ") ~ x^2 - y^{2/3} ~ paste(" = 1") ))
但是,获得情节的聪明/懒惰的方法可能只是保持代码不变,并用一条白线覆盖有问题的部分。在绘制曲线之后但在绘制渐近线之前执行此操作:
x <- seq(-5, 5, by = 0.01)
x <- x[(3*(x^2 - 1)) >= 0]
y.upper <- sqrt(3*(x^2 - 1))
y.lower <- -sqrt(3*(x^2 - 1))
y.max <- max(y.upper)
y.min <- min(y.lower)
d1 <- sqrt(3)*x
d2 <- -sqrt(3)*x
plot(c(-5, 5), c(y.min, y.max), type = "n", xlab = "x", ylab = "y")
lines(x, y.upper)
lines(x, y.lower)
lines(c(-.99, .99), c(0, 0), col = "white") ## lazy hack
lines(x,d1)
lines(x,d2)
points(2, 0)
points(-2,0)
text(2, 0, "focus (2, 0)", pos=4)
text(5, y.max, "asymptote y = sqrt(3)*x", pos = 2)
title("The hyperbola x^2 - y^2/3 = 1")