- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 ggplot2 来创建 NMDS 图,而不是普通的绘图函数。我想使用 vegan
包中的函数 ordiellipse()
在 NMDS 图中显示组。
示例数据:
library(vegan)
library(ggplot2)
data(dune)
# calculate distance for NMDS
sol <- metaMDS(dune)
# Create meta data for grouping
MyMeta = data.frame(
sites = c(2,13,4,16,6,1,8,5,17,15,10,11,9,18,3,20,14,19,12,7),
amt = c("hi", "hi", "hi", "md", "lo", "hi", "hi", "lo", "md", "md", "lo",
"lo", "hi", "lo", "hi", "md", "md", "lo", "hi", "lo"),
row.names = "sites")
# plot NMDS using basic plot function and color points by "amt" from MyMeta
plot(sol$points, col = MyMeta$amt)
# draw dispersion ellipses around data points
ordiellipse(sol, MyMeta$amt, display = "sites", kind = "sd", label = T)
# same in ggplot2
NMDS = data.frame(MDS1 = sol$points[,1], MDS2 = sol$points[,2])
ggplot(data = NMDS, aes(MDS1, MDS2)) +
geom_point(aes(data = MyMeta, color = MyMeta$amt))
如何将 ordiellipse 添加到使用 ggplot2 创建的 NMDS 图中?
Didzis Elferts 下面的回答非常有效。谢谢你!不过,我现在有兴趣将以下 ordiellipse 绘制到使用 ggplot2 创建的 NMDS 图:
ordiellipse(sol, MyMeta$amt, display = "sites", kind = "se", conf = 0.95, label = T)
不幸的是,我对 veganCovEllipse 函数的工作原理了解不够,无法自己调整脚本。
最佳答案
首先,我将列组添加到您的 NMDS 数据框中。
NMDS = data.frame(MDS1 = sol$points[,1], MDS2 = sol$points[,2],group=MyMeta$amt)
第二个数据框包含每个组的平均 MDS1 和 MDS2 值,它将用于在绘图上显示组名称
NMDS.mean=aggregate(NMDS[,1:2],list(group=group),mean)
数据框df_ell
包含显示省略号的值。它是通过隐藏在 vegan
包中的函数 veganCovEllipse
计算的。该函数应用于 NMDS(组)的每个级别,并且还使用函数 cov.wt
来计算协方差矩阵。
veganCovEllipse<-function (cov, center = c(0, 0), scale = 1, npoints = 100)
{
theta <- (0:npoints) * 2 * pi/npoints
Circle <- cbind(cos(theta), sin(theta))
t(center + scale * t(Circle %*% chol(cov)))
}
df_ell <- data.frame()
for(g in levels(NMDS$group)){
df_ell <- rbind(df_ell, cbind(as.data.frame(with(NMDS[NMDS$group==g,],
veganCovEllipse(cov.wt(cbind(MDS1,MDS2),wt=rep(1/length(MDS1),length(MDS1)))$cov,center=c(mean(MDS1),mean(MDS2)))))
,group=g))
}
现在使用函数 geom_path()
绘制椭圆,并使用 annotate()
绘制组名称。
ggplot(data = NMDS, aes(MDS1, MDS2)) + geom_point(aes(color = group)) +
geom_path(data=df_ell, aes(x=MDS1, y=MDS2,colour=group), size=1, linetype=2)+
annotate("text",x=NMDS.mean$MDS1,y=NMDS.mean$MDS2,label=NMDS.mean$group)
椭圆绘图的想法来自另一个 stackoverflow question .
首先,制作带有组列的NMDS数据框。
NMDS = data.frame(MDS1 = sol$points[,1], MDS2 = sol$points[,2],group=MyMeta$amt)
接下来,将函数 ordiellipse()
的结果保存为某个对象。
ord<-ordiellipse(sol, MyMeta$amt, display = "sites",
kind = "se", conf = 0.95, label = T)
数据框df_ell
包含显示省略号的值。它是通过隐藏在vegan
包中的函数veganCovEllipse
再次计算的。此函数应用于 NMDS(组)的每个级别,现在它使用存储在 ord
对象中的参数 - cov
、center
和 每个级别的规模
。
df_ell <- data.frame()
for(g in levels(NMDS$group)){
df_ell <- rbind(df_ell, cbind(as.data.frame(with(NMDS[NMDS$group==g,],
veganCovEllipse(ord[[g]]$cov,ord[[g]]$center,ord[[g]]$scale)))
,group=g))
}
绘图的方式与前面的示例相同。至于使用 ordiellipse()
来计算椭圆对象的坐标,此解决方案将使用您为此函数提供的不同参数。
ggplot(data = NMDS, aes(MDS1, MDS2)) + geom_point(aes(color = group)) +
geom_path(data=df_ell, aes(x=NMDS1, y=NMDS2,colour=group), size=1, linetype=2)
关于r - 将 vegan 包中的 ordiellipse 函数绘制到 ggplot2 中创建的 NMDS 图上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794419/
有没有办法从具有函数 metaMDS 的 NMDS 对象确定解释的累积方差(度量拟合或 R^2m)?该对象返回压力、分数、分数的值,但我没有看到差异。该函数来自 vegan 包并执行非度量多维缩放。
我正在尝试更改我的 NMDS 绘图中的轴以放大我的站点被绘制的位置。我假设在我没有绘制的物种点的产品中选择的空间。我曾尝试将 xlim 添加到我的代码中但无济于事,我想知道我是否将它放在错误的位置或者
我正在尝试使用嵌套因子制作 nMDS 数据图。我希望 nMDS 通过使用符号和颜色在一张图上显示这两个因素。 在这个可重现的示例中,如果 use 嵌套在 moisture 中,我希望绘图将 Moist
我有来自草地(站点 1-14)和采石场(站点 15-28)的数据,并希望它们在我使用素食包创建的 NMDS 图中具有不同的颜色,例如。 G。站点编号 1-14 为红色,站点编号为 15-28 为蓝色。
我刚刚成功地在我的非度量多维比例图上绘制和 ordisurf 模型。代码是从这个站点使用的。 https://oliviarata.wordpress.com/2014/07/17/ordinatio
我正在尝试使用 vegan 包在 R 中对数据集执行 NMDS,该数据集以绘图为列,以物种计数为列。我的数据采用文本文件格式(制表符分隔),包含大量“0”物种计数。但是,当我尝试创建距离矩阵时,我收到
我使用 ggplot2 来创建 NMDS 图,而不是普通的绘图函数。我想使用 vegan 包中的函数 ordiellipse() 在 NMDS 图中显示组。 示例数据: library(vegan)
我正在尝试通过以下函数在数据集上通过素食包应用 NMDS: library(vegan) library(MASS) library(MVA) library(ggplot2) all_d <- ve
我是一名优秀的程序员,十分优秀!