遮蔽R中两条曲线重叠的有限部分
shading a limited part of the overlap of two curves in R
我看到了在两条曲线重叠处绘制多边形的好答案 HERE。但我想知道如果我们想要遮蔽部分(而不是整个)重叠限制在0
和2
之间(as如下图所示)?
我尝试了以下但没有成功:
a <- curve(dnorm(x), -4, 6, panel.l = abline(v = c(0, 2), col = 1:2))
b <- curve(dnorm(x, 2), add = TRUE, col = 2)
x <- a$x[a$x >= 0 & a$x <= 2]
polygon(x, c(a$y[x], b$y[x]), col = 4)
这个想法是给适当的顶点。
a$y[x]
是错误的,因为 x 不包含索引而是值。
相反,您想通过成对最小函数找到交集,并进一步对其进行子集化以适应所需范围。
pmin(a$y, b$y)[a$x >= xaxis_cut_1 & a$x <= xaxis_cut_2]
您还想考虑从上面的交点中排除的一些自由顶点,因此相应地附加 x 和 y 向量。
x = c(xaxis_cut_1,a$x[a$x >= 0 & a$x <= 2],xaxis_cut_2)
y = c(0, pmin(a$y, b$y)[a$x >= xaxis_cut_1 & a$x <= xaxis_cut_2],0 )
完整代码
# your points on xaxis:
xaxis_cut_1 = 0 ; xaxis_cut_2 = 2 ;
# your code for curves
a <- curve(dnorm(x), -4, 6, panel.l = abline(v = c(xaxis_cut_1, xaxis_cut_2), col = 1:2))
b <- curve(dnorm(x, 2), add = TRUE, col = 2)
# calculate the desired area with a pairwise min or max function (pmin / pmax). subset the curve values on the basis of your desired x-axis range
polygon(x, y, col = 4)
here is the plot
我看到了在两条曲线重叠处绘制多边形的好答案 HERE。但我想知道如果我们想要遮蔽部分(而不是整个)重叠限制在0
和2
之间(as如下图所示)?
我尝试了以下但没有成功:
a <- curve(dnorm(x), -4, 6, panel.l = abline(v = c(0, 2), col = 1:2))
b <- curve(dnorm(x, 2), add = TRUE, col = 2)
x <- a$x[a$x >= 0 & a$x <= 2]
polygon(x, c(a$y[x], b$y[x]), col = 4)
这个想法是给适当的顶点。
a$y[x]
是错误的,因为 x 不包含索引而是值。
相反,您想通过成对最小函数找到交集,并进一步对其进行子集化以适应所需范围。
pmin(a$y, b$y)[a$x >= xaxis_cut_1 & a$x <= xaxis_cut_2]
您还想考虑从上面的交点中排除的一些自由顶点,因此相应地附加 x 和 y 向量。
x = c(xaxis_cut_1,a$x[a$x >= 0 & a$x <= 2],xaxis_cut_2)
y = c(0, pmin(a$y, b$y)[a$x >= xaxis_cut_1 & a$x <= xaxis_cut_2],0 )
完整代码
# your points on xaxis:
xaxis_cut_1 = 0 ; xaxis_cut_2 = 2 ;
# your code for curves
a <- curve(dnorm(x), -4, 6, panel.l = abline(v = c(xaxis_cut_1, xaxis_cut_2), col = 1:2))
b <- curve(dnorm(x, 2), add = TRUE, col = 2)
# calculate the desired area with a pairwise min or max function (pmin / pmax). subset the curve values on the basis of your desired x-axis range
polygon(x, y, col = 4)
here is the plot