मैंने आर hclust()
, as.dendrogram()
और plot.dendrogram()
फ़ंक्शंस का उपयोग करके this dendrogram उत्पन्न किया।मैं आर डी डेंड्रोग्राम में किनारों को रंग या सही ढंग से कैसे खींचूं?
मैंने dendrapply()
फ़ंक्शन और रंगीन पत्तियों के लिए स्थानीय फ़ंक्शन का उपयोग किया, जो ठीक काम कर रहा है।
मैं एक सांख्यिकीय परीक्षण से परिणाम है कि संकेत मिलता है अगर नोड्स का एक सेट (जैसे "_+v\_stat5a\_01_
" और "_+v\_stat5b\_01_
" पेड़ के नीचे-दाएं कोने में के समूह) महत्वपूर्ण या महत्वपूर्ण हैं।
मेरे पास एक स्थानीय फ़ंक्शन भी है जिसका उपयोग मैं dendrapply()
के साथ कर सकता हूं जो मेरे डेंड्रोग्राम में सटीक नोड पाता है जिसमें महत्वपूर्ण पत्तियां होती हैं।
मैं चाहूँगा के लिए या तो (उदाहरण के बाद):
- रंग किनारों कि "
_+v\_stat5a\_01_
" में शामिल होने और "_+v\_stat5b\_01_
"; या, - ड्रा एक
rect()
चारों ओर "_+v\_stat5a\_01_
" और "_+v\_stat5b\_01_
"
मैं निम्नलिखित स्थानीय समारोह ("नोड्स में leafList-मैच नोड्स में clusterList" का ब्यौरा है हालत नहीं कर रहे 'महत्वपूर्ण टी, लेकिन यह महत्वपूर्ण नोड्स पर प्रकाश डाला गया है कि):
markSignificantClusters <<- function (n) {
if (!is.leaf(n)) {
a <- attributes(n)
leafList <- unlist(dendrapply(n, listLabels))
for (clusterIndex in 1:length(significantClustersList[[1]])) {
clusterList <- unlist(significantClustersList[[1]][clusterIndex])
if (nodes-in-leafList-match-nodes-in-clusterList) {
# I now have a node "n" that contains significant leaves, and
# I'd like to use a dendrapply() call to another local function
# which colors the edges that run down to the leaves; or, draw
# a rect() around the leaves
}
}
}
}
इस if
ब्लॉक के भीतर से, मैं dendrapply(n, markEdges)
बुला की कोशिश की है, लेकिन यह काम नहीं किया:
markEdges <<- function (n) {
a <- attributes(n)
attr(n, "edgePar") <- c(a$edgePar, list(lty=3, col="red"))
}
मेरे आदर्श उदाहरण में, "_+v\_stat5a\_01_
" और "_+v\_stat5b\_01_
" को जोड़ने वाले किनारों को धराशायी और लाल रंग का रंग दिया जाएगा।
मैं भी इस if
ब्लॉक के भीतर rect.hclust()
उपयोग करने की कोशिश की है:
ma <- match(leafList, orderedLabels)
rect.hclust(scoreClusterObj, h = a$height, x = c(min(ma), max(ma)), border = 2)
लेकिन परिणाम क्षैतिज dendrograms (क्षैतिज लेबल के साथ अर्थात dendrograms) के साथ काम नहीं करता। Here is an example (निचले-दाएं कोने में लाल पट्टी नोट करें)। rect.hclust()
के आयामों के बारे में कुछ सही नहीं है, और मुझे नहीं पता कि यह कैसे काम करता है, अपना खुद का संस्करण लिखने में सक्षम होने के लिए।
मैं ठीक से काम करने के लिए, या अपने खुद के rect.hclust()
बराबर लिखने के लिए सक्षम होने के लिए edgePar
या rect.hclust()
प्राप्त करने के लिए किसी भी सलाह की सराहना करते हैं।
अद्यतन
इस सवाल पूछने के बाद से, मैं getAnywhere(rect.hclust())
इस्तेमाल किया कार्यात्मक कोड है, जो पैरामीटर गणना करता है और rect
वस्तु ड्रॉ प्राप्त करने के लिए। मैंने क्षैतिज और लंबवत पत्तियों को संभालने के लिए इस फ़ंक्शन का एक कस्टम संस्करण लिखा है, और इसे dendrapply()
के साथ कॉल करें।
हालांकि, कुछ प्रकार के क्लिपिंग प्रभाव हैं जो rect
के हिस्से को हटा देते हैं।क्षैतिज पत्तियों के लिए (पेड़ के दाहिने तरफ खींचे जाने वाले पत्ते), rect
का दायां किनारा या तो गायब हो जाता है या rect
के अन्य तीन किनारों की सीमा चौड़ाई से पतला होता है। ऊर्ध्वाधर पत्तियों (पेड़ के नीचे खींचे जाने वाले पत्ते) के लिए, rect
के बोटमॉस्ट किनारे को एक ही प्रदर्शन समस्या का सामना करना पड़ता है।
महत्वपूर्ण क्लस्टर को चिह्नित करने के साधन के रूप में मैंने जो किया था, वह rect
की चौड़ाई को कम करना है जैसे कि मैं क्लस्टर किनारों और (क्षैतिज) पत्ती लेबल की युक्तियों के बीच एक लंबवत लाल पट्टी प्रस्तुत करता हूं।
यह क्लिपिंग समस्या को समाप्त करता है, लेकिन एक और समस्या पेश करता है, जिसमें क्लस्टर एज युक्तियों और पत्ती के लेबल के बीच की जगह केवल छह या तो पिक्सेल चौड़ी है, जिसका मेरा अधिक नियंत्रण नहीं है। यह लंबवत पट्टी की चौड़ाई को सीमित करता है।
बदतर समस्या यह है कि x
-coordinate के निशान है कि जहां खड़ी धारी दो तत्वों के बीच फिट कर सकते हैं बड़ा पेड़ (par["usr"]
), जो बारी में कैसे पेड़ पदानुक्रम समाप्त होता है पर निर्भर करता है की चौड़ाई के आधार पर बदल जाएगा संरचित किया जा रहा है।
मैंने एक "सुधार" लिखा है, या बेहतर है, यह x
मान समायोजित करने के लिए एक हैक और rect
क्षैतिज पेड़ों के लिए चौड़ाई। यह हमेशा लगातार काम नहीं करता है, लेकिन पेड़ के लिए मैं बना रहा हूं, ऐसा लगता है कि यह किनारों और लेबलों के बहुत करीब (या ओवरलैपिंग) होने से रोकता है।
आखिरकार, एक बेहतर फिक्स होगा कि rect
को कैसे आकर्षित किया जाए ताकि कोई क्लिपिंग न हो। या किसी भी दिए गए पेड़ के लिए पेड़ किनारों और लेबलों के बीच विशिष्ट x
स्थिति की गणना करने के लिए एक सतत तरीका है, ताकि पट्टी को केंद्र और आकार में सही तरीके से आकार दिया जा सके।
मैं रंग या रेखा शैलियों के साथ किनारों को एनोटेट करने के लिए एक विधि में भी रूचि रखूंगा।
ठीक है, मैंने dendextend पैकेज में एक rect.dendrogram फ़ंक्शन लिखा था।'शाखा_attr_by_labels' नामक लेबलों के आधार पर रंगीन शाखाओं के लिए एक कार्य भी है। –