gpt4 book ai didi

r - 从 geom_area 获取区域大小(离散值)

转载 作者:行者123 更新时间:2023-12-02 15:44:50 25 4
gpt4 key购买 nike

我想使用 ggplot2 获取曲线下的面积。问题是我只有连续尺度(时间)上的离散值(测量值、因变量),但测量值的距离并不相等。我对拟合函数不感兴趣(我尝试进行分析),而只是对图下的区域感兴趣。

我知道我可以计算 x 值之间的平均值,然后进行“离散积分”。但我认为可能有一种更简单的方法来获取区域大小,因为我设法使用 geom_area 在 ggplot2 中绘制整个事物。 。所以我得到了一个整齐填充的区域,但是是否有可能从 geom_area 中提取区域大小? ?

编辑:下面是一些很好的解决方案,用于计算仅给出离散值的曲线下的面积。不过,如果有人知道是否可以简单地通过 geom_area 提取面积大小我非常想知道!

可重现的示例:

mydata <- data.frame(time = c(2,4,6,8,19,24,30,43,48,69),
ratio = c(0.24, 1.04, 1.08, 1.27, 2.12, 2.13, 2.34, 2.00, 1.90, 1.96))

ggplot(data = mydata, aes(x = time, y = ratio))+
geom_area(fill = "grey")+
geom_point(colour = "red")+
labs(title = "My sample data", y = "Ratio", x = "Time")

enter image description here

最佳答案

考虑后续点之间的灰色多边形区域。它由两种形状组成,

  • 高度从 y = 0 到两个 y 值中较低者的矩形,宽度为 x1 - x0。
  • 高度为 y0 和 y1 之差、宽度为 x1 - x0 的三角形。

enter image description here

如果我们计算每个后续点对的面积,我们可以将它们加在一起得到总面积。

mydata %>% 
arrange(time) %>%
mutate(area_rectangle = (lead(time) - time) * pmin(ratio, lead(ratio)),
area_triangle = 0.5 * (lead(time) - time) * abs(ratio - lead(ratio))) %>%
summarise(area = sum(area_rectangle + area_triangle, na.rm = TRUE))
    area
1 126.92

关于r - 从 geom_area 获取区域大小(离散值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41807913/

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