R语言 ggplot中的NMDS创建具有不同长度的嵌套框

xqkwcwgp  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(82)
  • 数据截图见尾供参考-
    你好,我是沿着this YouTube tutorial为NMDS和一切都进行得很顺利,直到我检查了描述,它说与r更新颜色/点将不会出现在图形上。
    这是我的原始代码:
data_1<-rivers_catchement[,2:27]
data_2<-rivers_catchement[1]

library("vegan")
NMDS<-metaMDS(data_1, distance= "bray", k = 2)

shape=c(18,16)
co=c("seagreen4", "olivedrab","seagreen2", "cornflowerblue", "slateblue2", "royalblue4", "brown2", "tomato1", "sienna3", "gold1", "darkgoldenrod1", "yellow2")
shape=c(18,16)
plot(NMDS$points, col=co[data_2$Habitat], pch = shape[data_2$Habitat], 
  cex=1.2, main="Macroinvertebrate Assembleges Across the Two Sites", xlab = "axis 1", ylab= "axis 2")

有了这个,我能够得到一个图表与标签的网站,但我不能得到颜色和点。
我尝试了他的更新代码链接在视频的描述:

library("vegan")
library("ggplot2")
datascores <- as.data.frame(scores(NMDS)) 
scores <- cbind(as.data.frame(datascores), Habitat = data_2$Habitat)
centroids <- aggregate(cbind(NMDS1, NMDS2) ~ Habitat, data = scores, FUN = mean)
seg <- merge(scores, setNames(centroids, c('Habitat','oNMDS1','oNMDS2')),
             by = 'Habitat', sort = FALSE)

ggplot(scores, aes(x = NMDS1, y = NMDS2, colour = Habitat)) +
  geom_segment(data = seg,
               mapping = aes(xend = oNMDS1, yend = oNMDS2)) + 
  geom_point(data = centroids, size = 4) +                    
  geom_point() +                                              
  coord_fixed()+                                              
  theme_bw()+ 
  theme(legend.position="right",legend.text=element_text(size=10),legend.direction='vertical')

然而-我得到这个错误消息,因为我有12行,但26列:
错误(函数(...,row.names = NULL,check.rows = FALSE,check.names = TRUE,:
参数意味着不同的行数:十二、二十六
我不认为改变数据的结构会起作用,因为我需要调用data_2来分离/颜色编码栖息地。
我已经附上了我目前的数据设置的截图。我还附上了data_1和data_2的截图。(见下文)
任何帮助将不胜感激,我尝试了其他Youtube教程/技术,但我觉得这一个我理解最多,最接近图形只需要修复长度问题的 Dataframe ,我认为。
screenshots of data
https://i.stack.imgur.com/CalDJ.jpg
https://i.stack.imgur.com/JwU8b.png
亲切的问候,罗西

bvhaajcl

bvhaajcl1#

您请求了两种不同类型的分数列表:行的分数和列的分数。无法将此列表转换为数据框。如果你只想得到一种分数,你应该这样说:scores(NMDS, display="site")。错误消息可能来自as.data.frame()命令,但我们不知道,因为您没有告诉我们哪个命令给了您错误消息。

相关问题