如何在素食包的布雷 nmds 分析中添加椭圆

Posted

技术标签:

【中文标题】如何在素食包的布雷 nmds 分析中添加椭圆【英文标题】:How to add ellipse in bray nmds analysis in vegan package 【发布时间】:2019-03-18 03:34:28 【问题描述】:

我已经使用 vegan 包绘制了点图,但我想圈出经过类似处理的物种。如图所示,3种颜色,3次处理。我也想圈出来。

这是我的代码。

library(vegan)
library(MASS)
library(readxl)



bray1 <- read_excel("bray1.xlsx")

cols <- c("red", "blue","blue", "green","green","red","blue","green","green","red","red","blue")

row.names(bray1) <- c("SI1", "SII0", "SI0", "SII2", "SI2", "SII1", "SIII0", "SIV2", "SIII2", "SIV1", "SIII1", "SIV0")

bcdist <- vegdist(bray1, "bray")

bcmds <- isoMDS(bcdist, k = 2)


plot(bcmds$points, type = "n", xlab = "", ylab = "")

text(bcmds$points, dimnames(bray1)[[1]],col = cols,size=10)

[我的数据

bray1<-structure(list(`Andropogon virginicus` = c(0, 0, 0, 0, 2.7, 31.5333333333333, 0, 0, 0, 0, 0, 0), `Oenothera parviflora` = c(61.6,30.3333333333333, 7.53333333333333, 0, 11.7333333333333, 0, 0, 0,75.4, 0, 0, 0), `Lespedeza cuneata` = c(0, 0, 0, 0, 0, 46.7333333333333, 0, 0, 3, 0, 0, 0), `Lespedeza pilosa` = c(0, 1.93333333333333, 0,  0, 1.73333333333333, 0, 0, 0, 0, 1.7, 0, 0), `Chamaesyce maculata` = c(0, 0, 0,4.733333333, 0, 0, 0, 0, 0, 0, 0, 0), `Chamaesyce nutans` = c(0,0, 0, 0, 0,0, 0.166666666666667, 0, 0, 0, 0, 0), `Bidens frondosa` = c(0, 0, 0,1.76666666666667, 1.03333333333333, 3.23333333333333, 0, 0, 0, 0, 0, 0), `Erigeron annuus` = c(0, 0, 0, 0, 0.4, 0, 0, 0, 0, 0, 0, 0), `Erigeron canadensis` = c(0, 0, 0, 0, 0, 4.33333333333333, 0, 0, 9.1, 2.066666667, 0,0), `Equisetum arvense` = c(46, 62.7333333333333, 0, 1.66666666666667, 0, 0.533333333333333, 0, 0, 0, 0, 0, 0),     `Erigeron sumatrensis` = c(0, 0, 0, 0, 0, 16.4333333333333,     0, 4, 0, 6.633333333, 0, 0), `Hypochaeris radicata` = c(0,     3.76666666666667, 116.6, 0, 5.033333333, 9.76666666666667,     29, 0, 23.1666666666667, 82.16666667, 0, 0), `Lactuca indica` = c(10.26666667,     0, 1.566666667, 120.1333333, 44.36666667, 42.0333333333333,     0, 14.2333333333333, 0, 0, 14.36666667, 22.2), `Solidago altissima` = c(0,     1.06666666666667, 33.93333333, 0, 0, 0, 0, 0, 0, 6.6, 0,     0), `Sonchus asper` = c(0, 35.9, 0, 0, 0, 7.46666666666667, 
29.6666666666667, 4.96666666666667, 0, 0, 0.23, 2.933333333    )), .Names = c("Andropogon virginicus", "Oenothera parviflora", "Lespedeza cuneata", "Lespedeza pilosa", "Chamaesyce maculata", "Chamaesyce nutans", "Bidens frondosa", "Erigeron annuus", "Erigeron canadensis", "Equisetum arvense", "Erigeron sumatrensis", "Hypochaeris radicata", "Lactuca indica", "Solidago altissima", "Sonchus asper"), row.names = c(NA, -12L), class = c("tbl_df", "tbl", "data.frame"))

【问题讨论】:

你能只分享bcmds数据框吗?人们更容易提供帮助 您可以使用reprexdatapasta 包快速创建可重现的示例,以便其他人提供帮助。请不要使用str()head() 或截图。另见Help me Help you & How to make a great R reproducible example? 你说“我想圈出类似处理的物种”,但什么决定了“类似处理”? 必须在绘图中使用asp = 1 以获得相同的纵横比用于排序图形(或使用vegan::plot 自动执行此操作的NMDS 函数。然后您应该检查@ vegan 中的 987654336@ 函数:它在图形上绘制椭圆。 @G5W 很抱歉造成混乱。我在图表和代码中用颜色表示它们。共有三个奶嘴 S0、S1 和 S2。罗马字母只是复制编号。 【参考方案1】:

这里有几个基于 car 包中的 dataEllipse 函数的替代方案。我对你的基础图做了一些小的改动。我发现很难阅读纯“绿色”颜色文本,所以我将其切换为“深绿色”。我更改了绘图限制,以便完整的椭圆出现在图片中。此外,您的text 语句包含一个参数sizetext 没有参数 size 所以我用 cex 替换它来设置字体大小。

library(car)

Group = c(1,2,2,3,3,1,2,3,3,1,1,2)
cols <- c("red", "blue","blue", "darkgreen","darkgreen","red","blue",
    "darkgreen","darkgreen","red","red","blue")

在第一个版本中,我按照您的要求做了,用省略号标记治疗组。

plot(bcmds$points, type = "n", xlab = "", ylab = "", 
    xlim=c(-0.8,0.8), ylim=c(-0.8,0.8), asp=1)
text(bcmds$points, dimnames(bray1)[[1]],col = cols, cex=0.8)
dataEllipse(bcmds$points[,1], bcmds$points[,2], factor(Group),
    plot.points=F, add=T, col=c("red", "blue", "green"),
    levels=rep(0.6, 3), center.pch=0, group.labels="", lwd=1)

在第二个版本中,我没有使用椭圆的轮廓,而是使用透明的填充颜色来显示椭圆。

plot(bcmds$points, type = "n", xlab = "", ylab = "", 
    xlim=c(-0.8,0.8), ylim=c(-0.8,0.8), asp=1)
text(bcmds$points, dimnames(bray1)[[1]],col = cols, cex=0.8)
dataEllipse(bcmds$points[,1], bcmds$points[,2], factor(Group),
    plot.points=F, add=T, col=c("red", "blue", "green"),
    levels=rep(0.6, 3), center.pch=0, group.labels="", 
    lty=0, fill=TRUE, fill.alpha=0.04)

【讨论】:

非常感谢您的宝贵时间。你是如何标记治疗组的?您是否在数据文件中创建了单独的列进行处理? 很抱歉,我没有回答这个问题。我会编辑它。是的,我为组创建了一个变量

以上是关于如何在素食包的布雷 nmds 分析中添加椭圆的主要内容,如果未能解决你的问题,请参考以下文章

在geom_point中使用cut时如何在ggplot中添加椭圆

改变R中的轴与NMDS图

我应该为nmds使用什么类型的矩阵

Qt动画椭圆沿圆

在主成分分析 (PCA) 图中添加椭圆

使用包 vegdist 在 R 中执行 NMDS 时出错