【发布时间】:2011-01-24 17:20:03
【问题描述】:
我有一个 R 函数,它为散点图生成 95% 的置信椭圆。输出如下所示,每个椭圆(50 行)默认为 50 个点:
[,1] [,2]
[1,] 0.097733810 0.044957994
[2,] 0.084433494 0.050337990
[3,] 0.069746783 0.054891438
我想在ggplot2 散点图上为一个称为“站点”的因子的每个级别叠加多个这样的椭圆,该散点图由以下命令生成:
> plat1 <- ggplot(mapping=aes(shape=site, size=geom), shape=factor(site)); plat1 + geom_point(aes(x=PC1.1,y=PC2.1))
这是在一个名为 dflat 的数据集上运行的,如下所示:
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”):
> 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 依赖于相同的点而不是绘制新的点。任何帮助将不胜感激。
【问题讨论】:
-
您是否尝试将默认值 50 点更改为 211?它有效吗?您可能需要在函数中添加另一个参数(点数)
-
您好,感谢您的快速回复。该功能可以更改点数,我确实尝试了211点。它产生了一个奇怪的非常厚的圆圈。我认为它不是首先对数据进行子集化,它应该能够用 50 个点绘制它 - 至少从文档中,您可以在同一个图上使用不同的数据集,所以自然地,不同数量的点应该是也可以。
-
如果您提供一个最小的可重现示例,我们会更容易。
-
aes调用中的东西应该是变量名。
-
实际上有人为此实现了 ggplot2 统计信息(发布在我的回答中)。
标签: r ggplot2 ellipse scatter-plot