如何在R树状图中正确着色边或绘制矩形?
我使用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”的边
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)