2012-09-17 10 views
8

क्या आर में दो डेंड्रोग्राम 'बैक टू बैक' रखने का कोई सीधा तरीका है? दो डेंड्रोग्राम में एक ही वस्तु होती है लेकिन कुछ अलग तरीकों से क्लस्टर होती है। मुझे जोर देना चाहिए कि डेंडरोग्राम अलग कैसे होते हैं। तो soilDB पैकेज के साथ क्या किया गया है लेकिन शायद कम शामिल और मिट्टी विज्ञान उन्मुख है?आर में ड्यूएलिंग डेंडरोग्राम (आर में डेंडरोग्राम को वापस वापस रखकर)

enter image description here

यह सीधी रेखाएं वस्तुओं (ऊपर देखें) इस रूप में के बीच जा रहा dendrograms के बीच कोई मतभेद पर जोर देना होगा की संख्या बढ़ाई जा dendrograms लाइन करने में सक्षम हो सक्षम होने के लिए बहुत अच्छा होगा।

कोई विचार?

उत्तर

10

वहाँ एक आसान तरीका हो सकता है लेकिन मैं इसे इसलिए यहाँ यह खरोंच से है नहीं दिख रहा है:

# First two dummy clusters (since you didn't provide with some...) 
hc1 <- hclust(dist(USArrests), "average") 
hc2 <- hclust(dist(USArrests), "complete") 

l <- length(hc1$order) 

# The matrix to draw the arrows: 
cbind((1:l)[order(hc1$order)],(1:l)[order(hc2$order)]) -> ord_arrow 

# The two vectors of ordered leave labels: 
hc1$labels[hc1$order]->leaves1 
hc2$labels[hc2$order]->leaves2 

# And the plot: 
layout(matrix(1:5,nrow=1),width=c(5,2,3,2,5)) 

# The first dendrogram: 
par(mar=c(3,3,3,0)) 
plot(as.dendrogram(hc1),horiz=TRUE,leaflab="none", ylim=c(0,l)) 

# The first serie of labels (i draw them separately because, for the second serie, I didn't find a simple way to draw them nicely on the cluster): 
par(mar=c(3,0,3,0)) 
plot(NA, bty="n",axes=FALSE,xlim=c(0,1), ylim=c(0,l),ylab="",xlab="") 
sapply(1:l,function(x)text(x=0,y=x,labels=leaves1[x], pos=4, cex=0.8)) 

# The arrows: 
par(mar=c(3,0,3,0)) 
plot(NA, bty="n",axes=FALSE,xlim=c(0,1), ylim=c(0,l),ylab="",xlab="") 
apply(ord_arrow,1,function(x){arrows(0,x[1],1,x[2],code=3, length=0.05, col="blue")}) 

# The second serie of labels: 
par(mar=c(3,0,3,0)) 
plot(NA, bty="n",axes=FALSE, xlim=c(0,1), ylim=c(0,l), ylab="",xlab="") 
sapply(1:l,function(x)text(x=1,y=x,labels=leaves2[x], pos=2, cex=0.8)) 

# And the second dendrogram (to reverse it I reversed the xlim vector: 
par(mar=c(3,0,3,3)) 
plot(as.dendrogram(hc2),horiz=TRUE, xlim=c(0,max(dist(USArrests))), leaflab="none", ylim=c(0,l)) 

enter image description here

मैं अनुकूलन करने के लिए क्रमपरिवर्तन इसके लिए कोई तरीका नहीं सोच सकते हैं सीधे तीर हालांकि (मैं डेंडरोग्राम ड्राइंग के साथ शुरू करने से बहुत परिचित नहीं हूं), इसलिए यदि किसी के पास कोई विचार है तो आपका टिप्पणी करने, संपादित करने या अपना जवाब जोड़ने के लिए आपका स्वागत है।

मुझे संदेह है कि किसी को पैकेज ape का उपयोग करना चाहिए, जो कि फ़िलोजेनेटिक पेड़ों में हेरफेर करने के लिए एक पैकेज है।

2

जो आप खोज रहे हैं उसे टैंगग्राम प्लॉट कहा जाता है जिसका उपयोग डेंडरोग्राम की दृष्टि से तुलना करने के लिए किया जाता है।

एक कार्यान्वयन tanglegram पैकेज dendextendR में पैकेज में उपलब्ध है। वास्तव में यह उपरोक्त कोड के आधार पर विकसित किया गया है plannapusuntangle_step_rotate_2side जैसे न्यूनतम विघटन के साथ प्लॉट प्राप्त करने के लिए कई संबंधित फ़ंक्शन भी उपलब्ध हैं।