如何在R树状图中正确着色边或绘制矩形?

如何在R树状图中正确着色边或绘制矩形?,r,edge-detection,dendrogram,hclust,R,Edge Detection,Dendrogram,Hclust,我使用R的hclust() 我使用了dendrapply()函数和一个局部函数来给树叶着色,效果很好 我有一个统计测试的结果,表明树右下角的一组节点(例如“+v\\u stat5a\\u 01\”和“+v\\u stat5b\\u 01\”的集群)是否重要或重要 我还有一个本地函数,可以与dendrapply()一起使用,它可以在包含重要叶子的树状图中找到确切的节点 我想(按照下面的例子): 为连接“\uv\\u stat5a\\u 01\u”和“\uv\\u stat5b\\u 01\u”的边

我使用R的
hclust()

我使用了
dendrapply()
函数和一个局部函数来给树叶着色,效果很好

我有一个统计测试的结果,表明树右下角的一组节点(例如“
+v\\u stat5a\\u 01\
”和“
+v\\u stat5b\\u 01\
”的集群)是否重要或重要

我还有一个本地函数,可以与
dendrapply()
一起使用,它可以在包含重要叶子的树状图中找到确切的节点

我想(按照下面的例子):

  • 为连接“
    \uv\\u stat5a\\u 01\u
    ”和“
    \uv\\u stat5b\\u 01\u
    ”的边上色;或者
  • 在“
    \u+v\\u stat5a\\u 01\u
    ”和“
    \u+v\\u stat5b\\u 01\u
    ”周围绘制一个
    rect()
  • 我有以下局部函数(“叶列表中的节点与clusterList中的节点匹配”条件的详细信息并不重要,但它会突出显示重要节点):

    在我的理想示例中,连接“
    \uv\\u stat5a\\u 01\
    ”和“
    \uv\\u stat5b\\u 01\
    ”的边将是虚线且为红色

    我还尝试在此
    if
    块中使用
    rect.hclust()

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

    ma那么你实际上问了五个问题(5+/-3)。至于编写自己的rect.hclust-like函数,如果您想查看,源代码位于
    library/stats/R/identify.hclust.R

    我自己快速地看了一眼,不确定它是否与我在阅读您的描述时所想的一样——它似乎绘制了多个矩形,
    x
    选择器似乎是硬编码的,以水平分隔标记(这不是您想要的,也没有
    y

    我会回来的,但在此期间,您可能(除了查看源代码之外)尝试使用不同的
    border=
    颜色和不同的
    h=
    值执行多个rect.hclust,以查看是否出现故障模式

    更新

    我也没有太多的运气去戳这个

    剪切的一个可能的难题是用尾随空格填充标签,然后将矩形的边缘稍微向内移动(这样做的想法是,只要将矩形向内移动,它就会离开剪切区域,但会覆盖标签的末端)


    另一个想法是用半透明(低阿尔法)颜色填充矩形,形成阴影区域而不是边框。

    我在Dendestend包中编写了rect.dendrogram函数。还有一个根据分支包含的标签为分支着色的函数,称为
    分支\u attr\u by\u labels
    markEdges <<- function (n) {
      a <- attributes(n)
      attr(n, "edgePar") <- c(a$edgePar, list(lty=3, col="red"))
    }
    
    ma <- match(leafList, orderedLabels)  
    rect.hclust(scoreClusterObj, h = a$height, x = c(min(ma), max(ma)), border = 2)