【问题标题】:R: Fill area under curve with Polygon()R:用 Polygon() 填充曲线下的区域
【发布时间】:2017-11-28 08:56:56
【问题描述】:

有没有一种通用的方法可以用多边形()函数填充曲线下的区域?

据我了解这篇文章的答案: Fill under line curve 我会假设 polygon(c(min(x), x, max(x)), c(min(y), y, min(y))始终工作,因为它从左下角开始,上升到曲线,下降到按钮右侧,然后回到开头。

但它并不总是有效。有时,我仍然会得到类似以下问题的图表:Why polygon in R works with a full curve but not with a half curve? 其中 R 只是画一条线并在其下方和上方填充。

那么什么是始终有效的输入(或其他函数)?

【问题讨论】:

  • 这个问题的答案有什么问题?看起来答案只是确保按x 对输入数据进行排序(即,将x 替换为x[order(x)],将y 替换为y[order(y)])。如果不是这种情况,请提供MRE
  • 答案没有错。我只是想指出我已经阅读了这个答案,并且我理解它的方式让我想到了我的解决方案。这不是批评,而是解释。如果我使用order(),数据会以递增的值排序(在 y 轴上不是我想要的)。不幸的是,我无法制作可重现的示例,因为我无法上传我的数据集,也无法使用随机值重现它...
  • 抱歉,我打错了。 y[order(x)]

标签: r polygon


【解决方案1】:

也许你需要na.rm = TRUE 来换取min(y)?无论如何,这里有一个函数可以让您指定要填充的水平边框:

fill_to_border <- function(f, from, to, y_border = 0, col = 1) {
  curve_points <- curve(f, from, to) 
  polygon_x <- c(min(curve_points$x), curve_points$x, max(curve_points$x))
  polygon_y <- c(y_border, curve_points$y, y_border)
  polygon_points <- list(x = polygon_x, y = polygon_y)
  polygon(polygon_points, col = col)
}

fill_to_border(dnorm, -4, 0)

【讨论】:

    猜你喜欢
    • 2018-11-01
    • 1970-01-01
    • 2020-07-02
    • 2011-12-15
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多