【发布时间】:2022-11-07 22:18:59
【问题描述】:
我正在寻找一种方法来可视化多条直线之间的表面,这些直线通过它们的截距和斜率在数据框中定义。我正在寻找的表面是包含原点 (0, 0) 的表面。
线的数量可能会有所不同(即使在下面的简化示例中我只有 6 条),其中一些可能是多余的(即它们没有包围我正在寻找的表面,因为其他线更具约束力)。
让我们来看看这个简单的数据框:
df <- data.frame("Line" = c("A", "B", "C", "D", "E", "F"),
"Intercept" = c(4, 3, -2.5, -1.5, -5, -.5),
"Slope" = c(-1, 1, 2.4, -.6, -.8, .6))
用ggplot2 绘制这些线:
ggplot(data = df) +
geom_vline(xintercept = 0) +
geom_hline(yintercept = 0) +
geom_abline(mapping = aes(intercept = Intercept, slope = Slope),
colour = "red") +
coord_cartesian(xlim = c(-6, 6), ylim = c(-6, 6))
给我以下输出:
基本上我想找到包围原点 (0, 0) 的线之间的交点,忽略多余的线(在这种情况下,左下角,截距 = -5 和斜率 = -0.8)。然后将使用这 5 个交点来绘制凸包。
我的主要问题在于找到交点的约束线(下面的绿色点)以便能够找到蓝色表面。
问题:关于如何在 R 中处理这个问题的任何建议,理想情况下可以扩展到更大的数据帧(包括更多的约束和冗余行)?
附加问题:geom_abline() 没有团体美学类似于geom_line(),可用于识别线。有谁知道基于斜率和截距(或线的两个用户定义点)在ggplot2 中绘制直线的解决方法?
提前感谢您提供任何建议或(部分)潜在解决方案!
【问题讨论】:
-
我想我会尝试为此使用 sf 包。
-
您已经定义了一个围绕原点的五角形。但是由五角形最低三个顶点定义的三角形也包括原点,并且明显小于五角形。是什么让五角形比三角形更受欢迎?
-
@Limey:三角形的顶部不是其中一条约束线的一部分。基本上,蓝色多边形的每一边都应该与其中一条红线重叠,或者换句话说,边每一端的两个顶点应该在同一条红线上。这有帮助吗?
-
是的,它确实。我将发布部分解决方案...
标签: r ggplot2 geometry convex-hull