R-在ScatterPlot中绘制椭圆(不是* stat-ellipse)

时间:2018-09-04 17:57:37

标签: r ggplot2 ellipse

我在R中使用ggplot创建了一个散点图:

ggplot(data, aes(x=x, y=y)) + 
  xlim(0,800) + 
  ylim(0,600) + 
  geom_point(colour="black") + 
  geom_path(aes(color="red")

我想使用中心坐标,高度和宽度绘制覆盖在该图上的椭圆(请不是置信区间椭圆)。

我已经尝试过使用plotrix包中的draw.ellipse函数,但这仅适用于R的默认plot创建的散点图 功能。

有人会知道如何在ggplot创建的散点图上绘制椭圆吗?

2 个答案:

答案 0 :(得分:1)

我今天遇到了同样的问题!这是您的情况的解决方案。首先,请确保您使用ggplot2创建了散点图,然后下载并导入了ggforce软件包。添加

geom_ellipse(aes(x0=x, y0=y, a=axis length on x direction, b=axis on y direction), fill=..., alpha=...)+geom_polygon()

对于(x,y)处的填充半透明椭圆。如果您不希望填充它,只需剪切fill和alpha参数,然后用geom_path()替换geom_polygon()即可。

希望这会有所帮助!

答案 1 :(得分:0)

这里是PlaneGeometry包的解决方案(很快在CRAN上)。有很多方法可以用此包定义椭圆。 “直接”方式包括提供中心,长半径,短半径以及水平轴和主轴之间的角度alpha(默认为度)。

library(ggplot2)
library(PlaneGeometry)

# define an ellipse
ell <- Ellipse$new(center = c(6,4), rmajor = 2, rminor = 1, alpha = 30)
# ellipse as a path
ellpath <- ell$path()
# the path is not closed; close it
ellpath <- rbind(ellpath, ellpath[1,])

ggplot() +
  geom_point(aes(x = Sepal.Length, y = Petal.Length), iris) +
  geom_path(aes(x = x, y = y), as.data.frame(ellpath), color = "red")

enter image description here