2013-03-16 7 views
0

이 질문의 하단에 표시된 것과 같은 플롯을 생성하려고합니다 : Adding ellipses to a principal component analysis (PCA) plot. 그러나 ggplot에 익숙하지 않고 여기에 표시된 ordiellipse() 기능을 수정하는 데 익숙하지 않습니다. Color-coding 95% confidence ellipses for centroids.그룹에 다른 색상과 선 종류를 사용하는 ordiellipse()의 show.groups 인수

그러므로 show.groupsordiellipse()에 넣으려고했으나 원하는 것을이 인수에 어떻게 표시할지 알 수 없습니다.

약 418 종에 대한 풍요 데이터를 포함하는 83 개 사이트가있는 표를 분석합니다. 나는 기능이 decorana() 인 DCA를 실행하고 데이터에는 희귀 한 종류가 다운로드되었습니다. 이후에 나는 엘렌 베르그 지표 값을 안수식에 맞춰야한다.

vali <-read.table(file = "VegOrdi2012.txt", header=T) 
attach(vali) 

calcul.env<-read.table(file = "indicator-values-2012.txt",header=T) 
attach(calcul.env) 
names(calcul.env) 

#Downweighting of rare species 
calcul.dca1<-decorana(vali,iweigh=1) 
calcul.dca1 

#Fitting of environmental values 
habi<-envfit(calcul.dca1~Habitat+Light+Temp+Continent+Moisture+pH+Nutrients+Salt,calcul.env,permu=999) 
habi 

그것은 I 포인트 텍스트로서의 플롯 번호로 표시된 모든 플롯 (83)과 함께 ordiellipse() 의해 도면에서 시각화에 필요한 인자 Habitat이다.

with(calcul.env, levels(Habitat)) 
[1] "Brown" "Emb" "Eph" "FBS" "GreeS" "RiBa" "Tracks" "TraffA" 
[9] "UrbanL" 

나는 색상과 그들 주위 타원 그리기없이 레이블을 할 수 있었다 :

#Assigning colors to the nine categories 
colvec <- c("black", "darkviolet", "green3", "darkorange", "magenta", "deepskyblue", "red", "blue", "forestgreen") 

plot(calcul.dca1, type = "n", xlim=c(-1.5,1.6),ylim=c(-3,3)) 
ordipointlabel(calcul.dca1, display="site", cex=0.7, col = colvec[Habitat],bg = colvec[Habitat],pch = 21) 

# Creating a legend 
with(calcul.env, legend("topright", legend = levels(Habitat), cex=0.65,bty = "n",col = colvec, pch = 21, pt.bg = colvec)) 

을하지만 어떻게 내가 어떻게 다른 Habitat을 색으로 show.groups 인수를 알 수 있습니까 서식지를 포함 아홉 개 카테고리로 구성 9 개의 줄임표에 표준 줄 이외의 다른 줄 유형을 할당하는 것뿐입니다.

plot(calcul.dca, type="n", xlim=c(-1.5,1.6),ylim=c(-1,1)) 

ordiellipse(calcul.dca, Habitat, display="site", kind = "sd", 
conf = 0.95, label = T, col="black", cex=0.7) 

을하지만 그것은 단지 내가 display="site"을 추가하더라도 플롯없이 타원을 같이 오히려 애매 :

지금까지 내가 사용하여이 음모를 내놓았다. 또한 겹치는 부분이 많아 어느 쪽이 어느 쪽인지를보기가 어렵습니다. 따라서 각 서식지 유형을 다르게 색칠하는 것이 좋습니다.

이 경우 사용자는 여기에서 온다, 내 DCA의 조정 데이터의 추출이 필요합니다

dput(calcul.dca1) 

structure(list(rproj = structure(c(0.622196100508291, 0.0425187062298239, 
0.809118643435233, 1.42649346881288, 0.942469303820393, 2.14549756552088, 
2.41922446503012, 1.28982244065239, 2.38544988614361, 1.40637644094225, 
1.91277135864581, 0.605410167146248, 0.806888393988314, 0.683853698855826, 
0.487565297706596, 1.33517822183407, 1.0239859712969, 1.11996240234112, 
0.878649568698446, 1.53912253203697, 1.10967929396299, 1.23838793138041, 
0.423890604035373, 0.624635178433215, 0.625774941613906, 0.873372685928585, 
1.02496140772642, 1.44785313041614, 1.08257665268759, 0.349688854561329, 
0.391547839427374, 0.730346245879122, 0.286646737460428, 0.731484625760109, 
1.08559070145785, 1.53243971551768, 0.85664914035342, 1.81525177285522, 
1.5519555131377, 1.39064843441504, 0.760013397658093, 1.22801365648165, 
2.21178067417998, 1.79390604164473, 1.65361126768449, 1.73966835197937, 
1.9237320812287, 1.80114956024378, 2.23293893445506, 2.02322760613128, 
... 
0.857428410615221, 1.48594779863814, 0.935954361867925, 1.0524685508641, 
0.898391402052793), .Dim = c(84L, 4L), .Dimnames = list(c("p1", 
"p2", "p3", "p4", "p5", "p6", "p7", "p8", "p9", "p10", "p11", 
"p12", "p13", "p14", "p15", "p16", "p17", "p18", "p19", "p20", 
"p21", "p22", "p23", "p24", "p25", "p26", "p27", "p28", "p29", 
"p30", "p31", "p32", "p33", "p34", "p35", "p36", "p37", "p38", 
"p39", "p40", "p41", "p42", "p43", "p44", "p45", "p46", "p47", 
"p48", "p49", "p50", "p51", "p52", "p53", "p54", "p55", "p56", 
"p57", "p58", "p59", "p61", "p62", "p63", "p64", "p65", "p66", 
"p67", "p68", "p69", "p70", "p71", "p73", "p74", "p75", "p76", 
"p77", "p78", "p79", "p80", "p81", "p82", "p83", "p85", "p86", 
"p87"), c("DCA1", "DCA2", "DCA3", "DCA4"))), cproj = structure(c(1.25651540418674, 
4.10086480672813, 0.985170303000948, 0.356752380731314, 0.0871005927968299, 
-0.65389620717045, 0.416500256857967, -0.0687562150601063, -0.448057138258203, 
-0.851379298478351, -4.22395990436862, 3.38456796429771, 3.50656010401288, 
3.0970679364606, 3.76068022295243, 4.15832492473722, 1.73508588573266, 
-0.0979648246992866, -1.54594775838685, 0.0871005366833882, 2.10389514743405, 
0.705016209734685, -1.54594765746973, -0.264737082168187, 1.28992362813467, 
... 
2.37831113227017, 2.6918186855265, 3.96654774047496), .Dim = c(414L, 
4L), .Dimnames = list(c("Ace_cam", "Ace_pla", "Ace_pse", "Ach_mil", 
"Aeg_pod", "Aes_hip", "Agr_cap", "Agr_sto", "All_pet", "Alo_pra", 
"Alo_myo", "Ama_alb", "Ama_bli", "Ama_pow", "Ama_ret", "Amb_art", 
"Ame_lam", "Ang_arc", "Anc_arv", "Ant_cau", "Ant_syl", "Ant_tin", 
"Ant_vul", "Ape_spi", "Aqu_vul", "Ara_tha", "Arc_lap", "Arc_min", 
"Are_ser", "Arr_ela", "Art_bie", "Art_cam", "Art_vul", "Asp_rut", 
... 

답변

1

시도는 별도로 show.groups을 사용하여 각 서식지 그룹에 colvec에서 색상을 개별적으로 각각의 타원을 추가하고 할당 할 수 있습니다. 예 :

with(calcul.env, ordiellipse(calcul.dca, Habitat, kind="se", conf=0.95, 
         lwd=2, col="black", show.groups = "Brown")) 
with(calcul.env, ordiellipse(calcul.dca, Habitat, kind="se", conf=0.95, 
         lwd=2, col="darkviolet", show.groups = "Emb")) 
with(calcul.env, ordiellipse(calcul.dca, Habitat, kind="se", conf=0.95, 
         lwd=2, col="green3", show.groups = "Eph")) 

등. 원하는 경우 루프를 만들어 쉽게 만들 수 있습니다. http://www.mail-archive.com/[email protected]/msg149786.html

+0

대단히 감사합니다. 이것은 내가 찾고 있었던 바로 그 것이다! 하나의 사이트 만 포함하는 두 가지 카테고리를 제외하고는 완벽하게 작동합니다. 또한 각각의 사이트가 다이어그램의 다른쪽에 위치하기 때문에 타원이 거울처럼 뒤집혀 그려진 것처럼 보입니다. 그러나 이것은 착색에 상관없이 발생합니다. 이것은 통계적인 문제입니까? 나는 이것을 http://stats.stackexchange.com/에서 논의해야 하는가? – Maxi

+0

나는 당신이 무슨 뜻인지 모르겠지만 안수식의 거울 같은 이미지는 여전히 사이트들 사이의 동일한 관계를 보여줄 것입니다. – user2055130