- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力完成在 vegan 和 ggplot2 中创建的 NMDS 图,但无法弄清楚如何将 envfit 物种加载向量添加到图中。当我尝试时,它显示“无效的图形状态”。
下面的示例是根据另一个问题( Plotting ordiellipse function from vegan package onto NMDS plot created in ggplot2 )稍作修改的,但它准确地表达了我想要包含的示例,因为我首先使用这个问题来帮助我将 metaMDS 引入 ggplot2:
library(vegan)
library(ggplot2)
data(dune)
# calculate distance for NMDS
NMDS.log<-log(dune+1)
sol <- metaMDS(NMDS.log)
# 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)
# 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))
#Add species loadings
vec.sp<-envfit(sol$points, NMDS.log, perm=1000)
plot(vec.sp, p.max=0.1, col="blue")
最佳答案
(否则很好)接受的答案存在问题,这解释了为什么所包含的图中向量的长度都相同[请注意,接受的答案现在已被编辑以按以下方式缩放箭头为了避免用户在遇到问答时感到困惑,我在下面描述了 $vectors$arrows
中存储的内容。 envfit()
返回的对象的组成部分是拟合向量的方向余弦。这些都是单位长度,因此@Didzis Elferts 图中的箭头都是相同长度的。这与 plot(envfit(sol, NMDS.log))
的输出不同,并且出现是因为我们通过与排序配置(“轴”)的相关性来缩放矢量箭头坐标。这样,与排序结构关系较弱的物种就会得到较短的箭头。缩放是通过将方向余弦乘以sqrt(r2)
来完成的。哪里r2
是打印输出表中显示的值。当将向量添加到现有绘图中时,vegan 还会尝试缩放向量集,以便它们填充可用的绘图空间,同时保持箭头的相对长度。 ?envfit
的详细信息部分讨论了如何完成此操作。并需要使用未导出的函数 vegan:::ordiArrowMul(result_of_envfit)
.
这是一个完整的工作示例,复制 plot.envfit
的行为使用ggplot2:
library(vegan)
library(ggplot2)
library(grid)
data(dune)
# calculate distance for NMDS
NMDS.log<-log1p(dune)
set.seed(42)
sol <- metaMDS(NMDS.log)
scrs <- as.data.frame(scores(sol, display = "sites"))
scrs <- cbind(scrs, Group = c("hi","hi","hi","md","lo","hi","hi","lo","md","md",
"lo","lo","hi","lo","hi","md","md","lo","hi","lo"))
set.seed(123)
vf <- envfit(sol, NMDS.log, perm = 999)
如果我们此时停下来看看 vf
:
> vf
***VECTORS
NMDS1 NMDS2 r2 Pr(>r)
Belper -0.78061195 -0.62501598 0.1942 0.174
Empnig -0.01315693 0.99991344 0.2501 0.054 .
Junbuf 0.22941001 -0.97332987 0.1397 0.293
Junart 0.99999981 -0.00062172 0.3647 0.022 *
Airpra -0.20995196 0.97771170 0.5376 0.002 **
Elepal 0.98959723 0.14386566 0.6634 0.001 ***
Rumace -0.87985767 -0.47523728 0.0948 0.429
.... <truncated>
所以r2
data 用于缩放列 NMDS1
中的值和NMDS2
。最终的情节是由以下内容产生的:
spp.scrs <- as.data.frame(scores(vf, display = "vectors"))
spp.scrs <- cbind(spp.scrs, Species = rownames(spp.scrs))
p <- ggplot(scrs) +
geom_point(mapping = aes(x = NMDS1, y = NMDS2, colour = Group)) +
coord_fixed() + ## need aspect ratio of 1!
geom_segment(data = spp.scrs,
aes(x = 0, xend = NMDS1, y = 0, yend = NMDS2),
arrow = arrow(length = unit(0.25, "cm")), colour = "grey") +
geom_text(data = spp.scrs, aes(x = NMDS1, y = NMDS2, label = Species),
size = 3)
这会产生:
关于r - 在 ggplot2 中绘制 envfit 向量(vegan 包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14711470/
envfit 结果中的 r2 是什么意思? 我知道提供的轴值(PCA、NMDS 等)是相关系数,p 值是显着性检验。但是我不明白r2代表什么? 如果在回归方法中看到的是通常的 R 方形,那么 envf
我正在努力完成在 vegan 和 ggplot2 中创建的 NMDS 图,但无法弄清楚如何将 envfit 物种加载向量添加到图中。当我尝试时,它显示“无效的图形状态”。 下面的示例是根据另一个问题(
我是一名优秀的程序员,十分优秀!