梵 希 2023-04-25 20:51 采纳率: 0%
浏览 11

这样的图怎么做NMDS分析

img

有没有人会用R做NMDS分析,画这样的图啊。
找了代码:


#!/usr/bin/env Rscript
#install.packages("vegan") #安装vegan包
library(vegan)
sample <- read.table(file.choose(),sep = "\t",row.names = 1)#第一行为列名
group <- read.table(file.choose(),sep = "\t",header = T,row.names = 1)#其中header=T表示将文件中第一行设为列名字。row.names= 1表示第一列设为行名
group1 <- group[match(rownames(sample),rownames(group)),] #匹配行名,很重要group = group[rownames(sample),]
#nmds分析
nmds1 <- metaMDS(sample, distance = 'bray', k = 3)
summary(nmds1)
#提取数据
nmds1.stress <- nmds1$stress
nmds1.point <- data.frame(nmds1$point)
nmds1.species <- data.frame(nmds1$species)
sample_site <- nmds1.point[1:2]
sample_site$names <- rownames(sample_site)
colnames(sample_site)[1:2] <- c('NMDS1', 'NMDS2')
#合并分组数据
sample_site <- cbind(sample_site,group1)
#给分组排序
sample_site$Depth <- factor(sample_site$Depth,levels =c('0m','25m','50m','117m','150m', '200m',
                                                        ordered = FALSE ))
sample_site$Particlesize <- factor(sample_site$Particlesize, levels = c("0.2-0.6μm","0.6-1.2μm","1.2-2μm","2-20μm",">20μm",
                                                                        ordered = FALSE))
View(sample_site)
#NMDS图绘制
windowsFonts(TNM = windowsFont("Times New Roman"))#设置字体
nmds_plot <- ggplot() +
  geom_point(data = sample_site, aes(NMDS1, NMDS2,color = Particlesize, shape = Depth), size = 5, alpha = 0.8) + #可在这里修改点的透明度、大小
  scale_shape_manual(values = c(15,17,18,19,20,79)) + #可在这里修改点的形状
  scale_color_manual(values = c("#99CCFF","#FF9999","#FFCC33","#99CC99",
                                "#996699" )) + #可在这里修改点的颜色
  scale_fill_manual(values = c("black" ),aesthetics = c("fill")) +#填充颜色
  #geom_ord_ellipse(aes(sample_site$NMDS1,sample_site$NMDS2,group= sample_site$Particlesize),ellipse_pro = 0.8,linetype=2,size=0.7,color='firebrick')+##添加0.8置信椭圆
  #geom_ord_ellipse(aes(sample_site$NMDS1,sample_site$NMDS2,group= sample_site$Particlesize,color= sample_site$Particlesize),ellipse_pro = 0.9,linetype=3,size=1)+ ##添加0.9置信椭圆
  theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent')) + #去掉背景  
  theme(legend.key = element_rect(fill = 'transparent'), legend.text =element_text(family="TNM"), legend.title = element_blank()) + #去掉图例标题及标签背景
  labs(x = 'Dimension1', y = 'Dimension2', title = paste('Stress =', round(nmds1$stress, 2))) +
  theme(plot.title = element_text(hjust = 0.8,family="TNM",face = "bold"))+  #标题
  theme(axis.text.x =element_text(family="TNM",face = "bold"),axis.text.y =element_text(family="TNM",face = "bold"),
        legend.text = element_text(family="TNM"),panel.grid.minor = element_blank())+
  theme(axis.title.y = element_text(family="TNM",face = "bold"),axis.title.x = element_text(family="TNM",face = "bold"))
#theme(panel.background = element_blank(),axis.line = element_line(color = "black"))#去上右边框
nmds_plot

总在分组排序的时候出现错误:


```r
Error in `$<-.data.frame`(`*tmp*`, Depth, value = integer(0)) : 
  replacement has 0 rows, data has 30


```

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-26 09:50
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 建议你看下这篇博客👉 :笔记—R语言NMDS
    • 除此之外, 这篇博客: 锚框分配算法详解,偏移量代码详解,nms详解中的 锚框分配 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      对于生成的锚框,计算得到任意一个锚框与所有的真实边界框的iou后,如何将真实边界框分配给锚框呢(也就是每一个锚框对应哪一个真实的边界框呢,或者对应背景呢),以下来自《动手学》
      在这里插入图片描述
      在这里插入图片描述

    • 以下回答来自chatgpt:

      回答:

      可以在R中使用NMDS(Nonmetric Multidimensional Scaling)分析制作该类图像。以下是相关的R代码和指导:

      1. 首先,安装并加载相应的包:
      install.packages("vegan") # 安装 vegan 包
      library(vegan) # 加载 vegan 包
      
      1. 接着,导入数据并进行排序:
      # 假设数据文件名为 mydata.csv,第1列为物种名称(Species),第2-5列为物种的数量
      mydata <- read.csv("mydata.csv", header = TRUE, row.names = 1) # 导入数据
      mydata # 查看数据
      
      # 对数据进行排序,例如按照物种数量(Freq)从高到低排序
      mydata <- mydata[order(-mydata$Freq), ] # 降序排列
      mydata # 查看排序后的数据
      
      1. 进行NMDS分析并生成图像:
      # 对数据进行NMDS分析
      nmds <- metaMDS(mydata)
      
      # 绘制NMDS图像
      plot(nmds, display = "sites", type = "n") # 先绘制空白图像
      text(nmds, display = "sites", cex=0.7) # 标记物种名称
      
      # 添加坐标轴标签
      xlabel <- "NMDS 1"
      ylabel <- "NMDS 2"
      mtext(side=1, xlabel)
      mtext(side=2, ylabel)
      
      # 添加图例
      legend("topright", legend = "Group", col = c("red","blue","green"),pch=19)
      

      以上是制作NMDS图像的基本步骤。在实际操作中,需要根据数据特点进行参数调整、美化图像等。

      至于问题中提到的“遇到了一些错误”,由于未提供具体错误信息和代码,无法给出详细解决方法。建议在出现错误时先认真查看错误信息,结合代码进行排查,或在相关R社区或论坛寻求帮助。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 4月25日

悬赏问题

  • ¥60 Matlab联合CRUISE仿真编译dll文件报错
  • ¥15 脱敏项目合作,ner需求合作
  • ¥15 脱敏项目合作,ner需求合作
  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId