如何在ggplot2中的散点图区域周围绘制整齐的多边形

机器算法验证 ggplot2 散点图
2022-01-18 19:32:25

如何在散点图上的一组点周围添加一个整洁的多边形?我正在使用 ggplot2 但对geom_polygon.

数据集在那边,作为一个制表符分隔的文本文件。下图显示了许多国家对健康和失业态度的两种衡量标准:

带有密度 2d 的散点图

我想从不geom_density2d那么花哨但经验上更正确的切换geom_polygon未排序数据的结果没有帮助:

在此处输入图像描述

如何绘制“整洁”的多边形,它们表现为围绕最小-最大 yx 值的轮廓路径?我尝试对数据进行排序无济于事。

代码:

print(fig2 <- ggplot(d, aes(man, eff, colour=issue, fill=issue)) + 
geom_point() + geom_density2d(alpha=.5) + labs(x = "Efficiency", y = "Mandate"))

使用此 CSV 文件d获取对象

解决方案:

感谢WayneAndy W等人的指点!数据、代码和图表已发布到 GitHub结果如下所示:

结果

3个回答

通过一些谷歌搜索,我发现了 Gota Morota 的网站,她的网站上已经有一个这样做的例子。下面是扩展到您的数据的示例。

在此处输入图像描述

library(ggplot2)
work <- "E:\\Forum_Post_Stuff\\convex_hull_ggplot2"
setwd(work)

#note you have some missing data
mydata <- read.table(file = "emD71JT5.txt",header = TRUE, fill = TRUE)
nomissing <- na.omit(mydata) #chull function does not work with missing data

#getting the convex hull of each unique point set
df <- nomissing
find_hull <- function(df) df[chull(df$eff, df$man), ]
hulls <- ddply(df, "issue", find_hull)

plot <- ggplot(data = nomissing, aes(x = eff, y = man, colour=issue, fill = issue)) +
geom_point() + 
geom_polygon(data = hulls, alpha = 0.5) +
labs(x = "Efficiency", y = "Mandate")
plot

如果我理解您的问题,您正在寻找 和 的凸healthunemployment在 R 中可能有几个包可以做到这一点,其中之一是 package geometry我想这些点是按周长排序的,但你必须检查一下。

编辑:这是一个不使用的示例,ggplot但我希望它有用。文档中的示例chull似乎是错误的,这可能会让您失望:

X <- matrix(rnorm(2000), ncol = 2)
X.chull <- chull (X)
X.chull <- c(X.chull, X.chull[1])
plot (X)
lines (X[X.chull,])

编辑 2:好的,这是使用 ggplot2 的东西。我们变成X了一个data.frame带有变量x和的y然后:

library(ggplot2)
X <- as.data.frame(X)
hull <- chull(X)
hull <- c(hull, hull[1])
ggplot(X, aes(x=x, y=y)) + geom_polygon(data=X[hull,], fill="red") + geom_point()

请注意,这是使用ggplotgeom_point中的数据 ( ) 和 aes,而我在.Xgeom_polygon

要完全了解它,您需要将两个问题的船体的 x 和 y 放入bar中,使用第三列issue来区分它们。

截至今天下午,我已将该chull函数作为函数包装在 R 包中geom_convexhull

加载包后,它可以用作任何其他几何图形,在您的情况下,它应该类似于:

ggplot(d, aes(man, eff, colour=issue, fill=issue)) + 
  geom_convexhull(alpha=.5) + 
  geom_point() + 
  labs(x = "Efficiency", y = "Mandate"))

该软件包在 github 上可用:https ://github.com/cmartin/ggConvexHull