2017-12-05 28 views
7

Tôi đang vẽ một loạt các RDA trong R, mỗi nhóm có 10+ vectơ môi trường. Các biến môi trường từng rơi vào một trong 5 loại. Tôi muốn các màu vector để phản ánh các loại này. Tôi đã làm nó trong một thời trang hơi ghetto bằng cách sản xuất cốt truyện màu đen và trắng thô, sau đó truy tìm nó trong Powerpoint (siêu tốn thời gian), nhưng có rất nhiều vấn đề cố hữu với điều này nhưng có vẻ tốt ít nhất. Đây là cốt truyện, lưu ý các màu vector. enter image description hereCác vector RDA màu theo nhóm trong R

Tôi muốn có đầu ra của mình là ô gốc R. Cốt truyện tôi sử dụng để thực hiện những âm mưu cơ sở hiện nay là:

#download the data# 
env<- read.csv("environmenta data.csv") 
bio<- read.csv("bio data.csv") 

#break out the groups of environmental vectors# 
#these are purley for example# 
group1<-as.matrix(subset(env,select=c(a,b,c)) 
group2<-as.matrix(subset(env,select=c(d,e,f,h)) 
group3<-as.matrix(subset(env,select=c(g)) 
group4<-as.matrix(subset(env,select=c(j,k,l,o)) 
group5<-as.matrix(subset(env,select=c(m,n,)) 

#run the RDA# 
rda1<-rda(bio,env) 

#Plot it# 
plot(rda1,type="n",bty="n",main="", 
    xlab="XX% variance explained", 
    ylab="XX% variance explained", 
    col.main="black",col.lab="black", col.axis="white", 
    xaxt="n",yaxt="n") 
#points(rda1,display="species",col="gray",pch=20) 
#option to display species points 
#text(rda2,display="species",col="gray") 
#option for species labels 

points(rda1,display="cn",col="black",lwd=2)#<<< guessing this is the key statement for my issue, but not sure 
text(rda1,display="cn",col="black",cex=0.5) 

Tôi giả định câu trả lời rơi vào này chỉ -> col = "..." lệnh, nhưng tôi không chắc chắn làm thế nào để nói nó được phân nhóm theo nhóm. Bất kỳ và tất cả các trợ giúp sẽ được đánh giá cao.

Trả lời

1
library(vegan) 

#DATA 
data(varespec) 
data(varechem) 
env = varechem 
bio = varespec 
rm(list = c("varechem", "varespec")) 

#Assign colors based on groups for the columns of env 
groups = rep(c("red", "blue"), length.out = NCOL(env)) 

rda1 = rda(X = bio, Y = env) 
plot(rda1, type = "n") 
points(rda1) 
text(rda1, display = "bp", col = groups) 
2

Có một vài vấn đề ở đây:

  1. vẽ điểm biplot, và
  2. rộng các điểm biplot theo plot.cca

Sau đó không thực sự quan trọng rất nhiều nếu bạn chỉ vẽ các điểm số biplot, nhưng một giải pháp chung cho loại âm mưu này yêu cầu chúng tôi xem xét rằng các điểm số khác cũng có thể được yêu cầu để vẽ.

Dưới đây là một ví dụ tái sản xuất sử dụng dữ liệu được xây dựng vào

library('vegan') 
data(varespec, varechem) 

Bây giờ chúng ta phù hợp với một phong chức ngớ ngẩn (không làm điều này tại folks nhà)

ord <- rda(varespec ~ ., data = varechem) 

Tiếp theo, trích xuất các điểm biplot

bp <- scores(ord, display = 'bp') 

và giả sử chúng tôi có một biến chứa các nhóm chúng tôi muốn chỉ định từng điểm số biplot để

f <- factor(sample(1:5, nrow(bp), replace = TRUE)) 

và vector liên quan đến màu sắc, chúng tôi muốn sử dụng

cols <- c('red','black','green','navy','purple') 

và mở rộng vector này màu sắc thành một trong những chiều dài nrow(bp), tức là một màu cho mỗi điểm biplot/biến

cols <- cols[f] 

Tiếp theo bắt đầu vẽ đồ thị, bằng cách chuẩn bị khu vực ô trống để chúng tôi có thể thêm các mũi tên

plot(ord, type = 'n') 

Trong ví dụ trên, chúng tôi để thiết lập khu vực ô để các loài và điểm/điểm mẫu được cung cấp.

Bây giờ chúng ta tính toán một số nhân cho phép các điểm biplot để chiếm một tỷ lệ quy định (fill = 0.75) của vùng âm mưu

mul <- ordiArrowMul(bp, fill = 0.75) 

Cuối cùng, thêm mũi tên biplot, màu theo nhóm của họ

arrows(0, 0, mul * bp[,1], mul * bp[,2], 
     length = 0.05, col = cols) 

và thêm nhãn vào mũi tên biplot

labs <- rownames(bp) 
text(ordiArrowTextXY(mul * bp, labs), labs, col = cols) 

Thi s sản xuất

enter image description here

Các vấn đề liên quan