我试图通过绘制惯性椭圆来表示物种的利基。在ade4
中执行此操作的功能是niche
。这是一个例子:
data(trichometeo)
pca1 <- dudi.pca(trichometeo$meteo, scan = FALSE)
nic1 <- niche(pca1, log(trichometeo$fau + 1), scan = FALSE)
s.distri(dfxy = nic1$ls, dfdistri = eval.parent(as.list(nic1$call)[[3]]))
此图表并不十分清楚。 PCA是针对环境变量完成的。 PCA的每个点都是一个研究站点。在每个研究地点,已观察到几个物种。椭圆是每个物种的利基。
当构建一个物种的椭圆时,根据物种的相对丰度给每个研究地点(点)赋予重量。这些称重点的重心是椭圆体的中心。椭圆的宽度与加权点的方差相关联。
因此没有散点图可以使用stat_ellipse
。
有关如何在ggplot
图片中执行此操作的任何建议吗?
谢谢
答案 0 :(得分:1)
所以,最后我找到了如何在ggplot
中绘制省略号。这在答案的第一部分进行了解释。第二部分描述了如何从ade4中的生态位分析中提取椭球坐标。
在ggplot中绘制一个简单的椭球为了做到这一点,你必须为列x和y构建一个数据框,用于构成椭圆的一些点的坐标,并使用{ {1}}如下:
geom_polygon
然后只绘制多边形:
> dput(test)
structure(list(x = c(-0.74970124137657, -0.776450364352299, -0.804256933708176,
-0.833011209618567, -0.862599712093033, -0.892905668830007, -0.923809476063724,
-0.955189170585639, -0.986920911077492, -1.01887946685642, -1.05093871210323,
-1.08297212362341, -1.11485328017637, -1.14645636140231, -1.1776566443777,
-1.20833099583969, -1.23835835813684, -1.26762022698836, -1.29600111916637,
-1.32338902825544, -1.34967586669074, -1.37475789233028, -1.39853611787775,
-1.42091670154015, -1.44181131737848, -1.46113750388986, -1.47881898944545,
-1.49478599329964, -1.50897550098285, -1.52133151299083, -1.53180526578912,
-1.5403554242604, -1.54694824483541, -1.55155770866329, -1.55416562429619,
-1.55476169948255, -1.55334358178592, -1.54991686786897, -1.54449508140603,
-1.53709961971128, -1.52775966929336, -1.51651209066957, -1.50340127289419,
-1.48847895837522, -1.47180403867071, -1.45344232207069, -1.43346627388192,
-1.41195473044039, -1.38899258798039, -1.3646704675878, -1.3390843575601,
-1.31233523458437, -1.28452866522849, -1.2557743893181, -1.22618588684363,
-1.19587993010666, -1.16497612287294, -1.13359642835103, -1.10186468785917,
-1.06990613208025, -1.03784688683344, -1.00581347531326, -0.973932318760297,
-0.94232923753436, -0.911128954558971, -0.880454603096979, -0.850427240799828,
-0.821165371948307, -0.792784479770296, -0.765396570681226, -0.739109732245926,
-0.714027706606386, -0.690249481058919, -0.66786889739652, -0.646974281558191,
-0.627648095046803, -0.609966609491222, -0.593999605637033, -0.579810097953819,
-0.567454085945835, -0.556980333147553, -0.548430174676264, -0.541837354101259,
-0.537227890273375, -0.534619974640476, -0.534023899454122, -0.535442017150752,
-0.538868731067695, -0.544290517530637, -0.551685979225388, -0.561025929643302,
-0.572273508267099, -0.585384326042479, -0.600306640561448, -0.616981560265954,
-0.63534327686597, -0.655319325054748, -0.676830868496273, -0.699793010956271,
-0.724115131348859), y = c(0.325013216091984, 0.336960163623126,
0.346538198705152, 0.353709521209382, 0.358445829202159, 0.360728430639646,
0.360548317136793, 0.357906199519309, 0.352812505018361, 0.345287336119057,
0.335360391225119, 0.323070847452856, 0.308467206016976, 0.291607100818459,
0.272557070989873, 0.251392298295821, 0.228196310424862, 0.203060651343884,
0.176084520015889, 0.147374378907005, 0.117043533827776, 0.085211686766882,
0.0520044634820859, 0.0175529177127555, -0.0180069860293719,
-0.0545349090500008, -0.0918866923249894, -0.129914925430158,
-0.168469528302887, -0.207398343539562, -0.246547736891326, -0.285763203588276,
-0.324889978099203, -0.363773644920435, -0.402260747983286, -0.440199396275052,
-0.477439863283444, -0.513835177898732, -0.549241704441568, -0.583519709527388,
-0.616533913530252, -0.648154024469714, -0.678255252213751, -0.7067188009684,
-0.733432338110486, -0.758290437513162, -0.781194995614671, -0.802055618588285,
-0.820789979085438, -0.837324141144163, -0.851592851980555, -0.863539799511696,
-0.873117834593722, -0.880289157097953, -0.885025465090729, -0.887308066528217,
-0.887127953025363, -0.884485835407879, -0.879392140906931, -0.871866972007626,
-0.861940027113689, -0.849650483341425, -0.835046841905545, -0.818186736707027,
-0.799136706878442, -0.77797193418439, -0.754775946313431, -0.729640287232453,
-0.702664155904458, -0.673954014795575, -0.643623169716345, -0.611791322655452,
-0.578584099370656, -0.544132553601326, -0.508572649859198, -0.47204472683857,
-0.434692943563581, -0.396664710458413, -0.358110107585684, -0.31918129234901,
-0.280031898997246, -0.240816432300296, -0.201689657789369, -0.162805990968137,
-0.124318887905287, -0.0863802396135213, -0.0491397726051291,
-0.012744457989841, 0.0226620685529939, 0.0569400736388145, 0.0899542776416779,
0.12157438858114, 0.151675616325177, 0.180139165079826, 0.206852702221912,
0.231710801624588, 0.254615359726098, 0.275475982699712, 0.294210343196865,
0.31074450525559)), .Names = c("x", "y"), row.names = c(NA, -100L
), class = "data.frame")
针对此特定问题:如何使用 ggplot()+geom_polygon(data=test, aes(x=x, y=y))
从利基分析中提取省略号坐标:
来自ade4
的图可以放在对象中:
ade4
p1是S4类的对象,可以使用data(trichometeo)
pca1 <- dudi.pca(trichometeo$meteo, scan = FALSE)
nic1 <- niche(pca1, log(trichometeo$fau + 1), scan = FALSE)
p1<-s.distri(dfxy = nic1$ls, dfdistri = eval.parent(as.list(nic1$call)[[3]]))
访问包含数据的插槽,如下所示:
@
此命令显示包含每个物种的列表:
要提取这些坐标,请使用p1@s.misc$ellipse
sapply
然后将它们转换为数据框:
listx=sapply(p1@s.misc$ellipse, "[", "x")
listy=sapply(p1@s.misc$ellipse, "[", "y")
并将它们合并到一个数据框中(我使用tabx=do.call(data.frame, listx)
taby=do.call(data.frame, listy)
包中的melt
来为reshape
设置一个长数据框
ggplot
然后,您可以将此数据框与上述方法一起使用