كيف يمكنني لون الحواف أو رسمها بشكل صحيح في REDRogram؟

StackOverflow https://stackoverflow.com/questions/717747

سؤال

لقد ولدت هذا dendrogram. باستخدام ص hclust(), as.dendrogram() و plot.dendrogram() المهام.

لقد استخدمت dendrapply() وظيفة وظيفة محلية لأوراق الألوان، والتي تعمل بشكل جيد.

لدي نتائج من اختبار إحصائي يشير إلى ما إذا كانت مجموعة من العقد (على سبيل المثال مجموعة من "_+v\_stat5a\_01_" و "_+v\_stat5b\_01_"في الركن الأيمن السفلي من الشجرة) كبيرة أو مهمة.

لدي أيضا وظيفة محلية يمكنني استخدامها dendrapply() هذا يجد العقدة الدقيقة في Dendrogram التي تحتوي على أوراق كبيرة.

أود إما (بعد المثال):

  1. اللون الحواف التي تنضم "_+v\_stat5a\_01_" و "_+v\_stat5b\_01_"؛ أو،
  2. رسم أ rect() حول "_+v\_stat5a\_01_" و "_+v\_stat5b\_01_"

لدي الوظيفة المحلية التالية (تفاصيل "تفاصيل" حالة "عقد العقد في المباراة - في كلوزتيز القائمة" ليست مهمة، لكنها تسلط الضوء على العقد الكبيرة):

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_"سوف تتوقف ولون أحمر.

لقد حاولت أيضا استخدام rect.hclust() في خضم هذا if منع:

ma <- match(leafList, orderedLabels)  
rect.hclust(scoreClusterObj, h = a$height, x = c(min(ma), max(ma)), border = 2)

ولكن النتيجة لا تعمل مع dendrograms الأفقية (بمعنى آخر dendrograms مع الملصقات الأفقية). هنا مثال (لاحظ الشريط الأحمر في الزاوية اليمنى السفلى). شيء غير صحيح حول أبعاد ما rect.hclust() يولد، وأنا لا أعرف كيف يعمل، لتكون قادرة على كتابة الإصدار الخاص بي.

أنا أقدر أي نصيحة للحصول عليها edgePar أو rect.hclust() للعمل بشكل صحيح، أو أن تكون قادرة على كتابة بلدي rect.hclust() ما يعادل.

تحديث

منذ طرح هذا السؤال، اعتدت getAnywhere(rect.hclust()) للحصول على الرمز الوظيفي الذي يحسب المعلمات ويسحب rect هدف. كتبت نسخة مخصصة من هذه الوظيفة للتعامل مع الأوراق الأفقية والرأسية، واتصل بها dendrapply().

ومع ذلك، هناك نوع من تأثير القصاص الذي يزيل جزء من rect. وبعد للأوراق الأفقية (الأوراق التي يتم رسمها على الجانب الأيمن من الشجرة)، حافة أقصى اليمين لل rect إما يختفي أو أرق من عرض الحدود من الجوانب الثلاثة الأخرى rect. وبعد للأوراق العمودي (الأوراق التي يتم رسمها على الجزء السفلي من الشجرة)، حافة باتوموست rect يعاني نفس مشكلة العرض.

ما فعلته كوسيلة لوضع العلامات على مجموعات كبيرة هو الحد من عرض rect بحيث أقصد شريط أحمر عمودي بين نصائح حواف الكتلة والملصقات (الأفقية).

هذا يلغي قضية القصاصة، ولكنه يقدم مشكلة أخرى، في تلك المساحة بين نصائح حافة الكتلة وتسميات الأوراق ليست سوى ستة أو نحو ذلك بكسل، والتي ليس لدي الكثير من السيطرة عليها. هذا يحد من عرض الشريط الرأسي.

المشكلة أسوأ هي أن x-Coordinate الذي يمثل حيث يمكن أن يتغير الشريط الرأسي يصلح بين العنصرين استنادا إلى عرض الشجرة الأكبرpar["usr"])، والتي بدورها تعتمد على كيفية انتهاء التسلسل الهرمي للشجرة من الهيكل.

كتبت "تصحيح" أو، أدى بشكل أفضل، هاك لضبط هذا x القيمة و rect عرض الأشجار الأفقية. لا يعمل دائما باستمرار، ولكن بالنسبة للأشجار التي أقوم بها، يبدو أنها تبقي من الحواف والملصقات القريبة (أو المتداخلة).

في نهاية المطاف، سيكون الإصلاح الأفضل معرفة كيفية رسم rect بحيث لا يوجد لقطة. أو طريقة ثابتة لحساب المحدد x موقف بين حواف الأشجار والملصقات لأي شجرة معينة، وذلك لمركز وحجم الشريط بشكل صحيح.

كما سأكون مهتما جدا بوسيلة للتعليق على الحواف بألوان أو أنماط الخط.

هل كانت مفيدة؟

المحلول

لذلك قد سئلت فعلا عن خمس أسئلة (5 +/- 3). بقدر ما يكتب الخاص بك rect.hclust مثل وظيفة، المصدر في library/stats/R/identify.hclust.R إذا كنت تريد أن تنظر إليها.

أخذت نظرة سريعة على نفسي وأنا لست متأكدا من أن ما اعتقدت أنه فعلت من قراءة وصفك - يبدو أنه رسم مضاعف مستطيلات، أيضا، x يبدو أن محدد مشفرة بجد لفصل العلامات أفقيا (وهو ما لا تريده ولا يوجد y).

سأعود، ولكن في غضون ذلك قد تقوم (بالإضافة إلى النظر إلى المصدر) حاول القيام بعدة مستقلة. border= الألوان ومختلفة h= القيم لمعرفة ما إذا كان نمط الفشل يظهر.

تحديث

لم يكن لدي الكثير من الحظ بدس هذا إما.

سيقوم مجموعة Kludge المحتملة بالقطع بالمنصة التسميات بمسافات زائدة ثم إحضار حافة مستطيلك قليلا (الفكرة التي يجلبها المستطيل فقط من شأنها أن تخرج من منطقة القطع ولكن الكتابة فوق نهايات الملصقات ).

ستكون فكرة أخرى ملء المستطيل بألوان شفافة (ألفا منخفضة)، مما يجعل منطقة مظللة بدلا من مربع محيط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top