gpt4 book ai didi

r - 通过计算ggplot2中的像素来近似面积大小

转载 作者:行者123 更新时间:2023-12-04 09:37:08 26 4
gpt4 key购买 nike

是否可以提取一些任意填充区域的像素数来近似 ggplot2 中的区域大小?

具体来说,我正在使用 geom_ribbon 来突出显示图形中的某些区域,并且想知道是否有一些通用的方法来近似相应的区域大小(不直接引用输入数据)。我在考虑 ggplot2 可能产生的隐藏函数或中间数据,以便为屏幕上蓝色区域的每个像素着色。

library(ggplot2)
yint <- 5
x <- 1:100
df <- data.frame(x=x, y=x^0.5)
rib <- df[df$y>=yint,]
ggplot(df, aes(x=x)) + geom_line(aes(y=y)) + geom_hline(aes(yintercept=yint)) + geom_ribbon(data=rib, aes(x=x, ymin=yint, ymax=y), fill='lightblue')

编辑:

采用lukeA的第一个解决方案,我可以简单地完成我之前的带状数据形成一个封闭的多边形,然后在其上使用Polygon()函数,它也会自动计算出相应的面积。

library(sp)
pol <- rbind(rib, c(100,5), c(25,5))
Polygon(pol)@area

最佳答案

这里有两种方法 - 一种是基于多边形/矢量,另一种是基于像素/栅格:

library(ggplot2)
library(rgeos)
library(sp)
library(png)

f <- function(x) Polygons(list(Polygon(map_data("world", region = x)[, 1:2])), x)
(tab1 <- gArea(SpatialPolygons(list(f("Germany"), f("France"))), byid=T))
# Germany France
# 41.21485 84.34209
unname(tab1["France"]/tab1["Germany"])
# [1] 2.046401

map <- map_data("world", region=c("Germany", "France"))
p <- ggplot(map, aes(long, lat, group=group, fill=region)) +
geom_polygon() + coord_map() +
theme_minimal() +
scale_fill_manual(values=c("Germany"="#00BFC4", "France"="#F8766D"), guide="none")
ggsave(tf <- tempfile(fileext = ".png"), p, dpi = 90)
r <- as.matrix(as.raster(readPNG(tf)))
(tab2 <- table(r[r %in% c("#F8766D", "#00BFC4")]))
unname(tab2["#F8766D"]/tab2["#00BFC4"])
# 1.2781

关于r - 通过计算ggplot2中的像素来近似面积大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35890520/

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