首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将数据椭圆叠加到ggplot2散点图上?

如何将数据椭圆叠加到ggplot2散点图上?
EN

Stack Overflow用户
提问于 2010-03-08 01:12:48
回答 2查看 20.9K关注 0票数 21

我有一个R函数,它为散点图生成95%的置信度椭圆。输出如下所示,每个椭圆(50行)的默认值为50点:

代码语言:javascript
复制
           [,1]         [,2]
 [1,]  0.097733810  0.044957994
 [2,]  0.084433494  0.050337990
 [3,]  0.069746783  0.054891438

我想在ggplot2散点图上为一个名为'site‘的因子的每个级别叠加一些这样的椭圆,该散点图由以下命令生成:

代码语言:javascript
复制
> plat1 <- ggplot(mapping=aes(shape=site, size=geom), shape=factor(site)); plat1 + geom_point(aes(x=PC1.1,y=PC2.1))

这是在一个名为dflat的数据集上运行的,该数据集如下所示:

代码语言:javascript
复制
site      geom         PC1.1        PC2.1       PC3.1        PC1.2       PC2.2
1 Buhlen 1259.5649 -0.0387975838 -0.022889782  0.01355317  0.008705276  0.02441577
2 Buhlen  653.6607 -0.0009398704 -0.013076251  0.02898955 -0.001345149  0.03133990

结果很好,但是当我尝试添加椭圆时(假设有一个站点,名为"Buhlen"):

代码语言:javascript
复制
> plat1 + geom_point(aes(x=PC1.1,y=PC2.1)) + geom_path(data=subset(dflat, site="Buhlen"),mapping=aes(x=ELLI(PC1.1,PC2.1)[,1],y=ELLI(PC1.1,PC2.1)[,2]))

我收到一条错误消息:"Error in data.frame(x = c(0.0977338099339815, 0.0844334944904515, 0.0697467834016782, : arguments imply differing number of rows: 50, 211

我以前曾设法修复过这个问题,但我记不清是如何修复的。geom_path似乎依赖于相同的点,而不是绘制新的点。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2011-03-10 23:50:08

也许这对你有帮助:

代码语言:javascript
复制
#bootstrap
set.seed(101)
n <- 1000
x <- rnorm(n, mean=2)
y <- 1.5 + 0.4*x + rnorm(n)
df <- data.frame(x=x, y=y, group="A")
x <- rnorm(n, mean=2)
y <- 1.5*x + 0.4 + rnorm(n)
df <- rbind(df, data.frame(x=x, y=y, group="B"))

#calculating ellipses
library(ellipse)
df_ell <- data.frame()
for(g in levels(df$group)){
df_ell <- rbind(df_ell, cbind(as.data.frame(with(df[df$group==g,], ellipse(cor(x, y), 
                                         scale=c(sd(x),sd(y)), 
                                         centre=c(mean(x),mean(y))))),group=g))
}
#drawing
library(ggplot2)
p <- ggplot(data=df, aes(x=x, y=y,colour=group)) + geom_point(size=1.5, alpha=.6) +
  geom_path(data=df_ell, aes(x=x, y=y,colour=group), size=1, linetype=2)

输出如下所示:

Here是一个更复杂的例子。

票数 23
EN

Stack Overflow用户

发布于 2012-04-17 19:45:22

Keelan Evanini,Ingrid Rosenfelder和Josef Fruehwald (JoFrhwld@gmail.com)创建了一个95%置信区间椭圆的ggplot2统计实现(以及在ggplot2中绘制椭圆的一种更简单的方法):

GitHub stat-ellipse.R

their site

您可以将其用作:

代码语言:javascript
复制
library(ggplot2)
library(devtools)
library(digest)
source_url("https://raw.github.com/low-decarie/FAAV/master/r/stat-ellipse.R")    
qplot(data=df, x=x, y=y, colour=colour)+stat_ellipse()

创建数据的步骤

代码语言:javascript
复制
set.seed(101)
n <- 1000
x <- rnorm(n, mean=2)
y <- 1.5 + 0.4*x + rnorm(n)
colour <- sample(c("first", "second"), size=n, replace=T)
df <- data.frame(x=x, y=y, colour=colour)
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2397097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档