我有两个 hclust 对象如下,我想合并并绘制它们:
# Create hclust object 1
hc1 <- list()
hc1$merge <- matrix(c(-8, -9,
-1, -2,
-5, 1,
-7, 2,
-3, 4,
3, 5,
-4, 6,
-6, 7), ncol = 2, byrow = T)
hc1$height <- c(0.01333333, 0.02000000, 0.03833333, 0.05500000, 0.06888889, 0.10555556, 0.13285714, 0.19625000)
hc1$order <- c(4, 3, 2, 1, 7, 5, 9, 8, 6)
hc1$labels <- c(4141, 4139, 4137, 4136, 4303, 4292, 4306, 4305, 4302)
class(hc1) <- "hclust"
# Create hclust object 2
hc2 <- list()
hc2$merge <- matrix(c( -1, -13,
-35, -39,
-33, 2,
-40, -41,
-34, 4,
-21, 5,
-27, -32,
-31, -42,
-19, 8,
-43, -50,
-38, 10,
-26, -29,
-51, -52,
-24, -49,
-20, 3,
-22, 7,
9, 11,
12, 13,
-12, 16,
-9, 17,
-45, 18,
-36, 21,
-11, 15,
-23, -53,
-47, 22,
-17, 14,
-30, 6,
24, 25,
-14, -15,
-16, -18,
-6, -7,
19, 20,
23, 30,
26, 27,
-10, 32,
-5, 31,
-44, 28,
-4, 36,
-37, 35,
33, 34,
38, 39,
-25, -48,
29, 40,
-46, 43,
1, 37,
-8, 41,
-3, 44,
-28, 46,
42, 45,
47, 48,
49, 50,
-2, 51), ncol = 2, byrow = T)
hc2$height <- c(0.003333333, 0.003333333, 0.003333333, 0.003333333, 0.003333333, 0.003333333,
0.003333333, 0.003333333, 0.003333333, 0.003333333, 0.003333333, 0.003333333,
0.003333333, 0.006666667, 0.006666667, 0.006666667, 0.006666667, 0.006666667,
0.007777778, 0.008333333, 0.008333333, 0.008666667, 0.009166667, 0.010000000,
0.011111111, 0.011666667, 0.013333333, 0.015000000, 0.016666667, 0.016666667,
0.016666667, 0.017142857, 0.019333333, 0.020888889, 0.022121212, 0.023333333,
0.024444444, 0.025555556, 0.026944444, 0.031785714, 0.035320513, 0.036666667,
0.044444444, 0.048627451, 0.049666667, 0.051176471, 0.052407407, 0.054259259,
0.060000000, 0.061671283, 0.099711779, 0.114743590)
hc2$order <- c( 2, 4, 5, 6, 7, 37, 12, 27, 32, 22, 38, 50, 43, 31, 42, 19, 9, 10, 8, 28, 3, 46, 18, 16, 11, 20, 35,
39, 33, 30, 34, 41, 40, 21, 49, 24, 17, 14, 15, 53, 23, 47, 51, 52, 29, 26, 45, 36, 44, 13, 1, 48, 25)
hc2$labels <- c(4140, 4143, 4152, 4153, 4154, 4913, 4288, 4613, 4767, 4459, 4914, 5061, 4919, 4763, 4918, 4456,
4285, 4286, 4155, 4614, 4142, 5057, 4335, 4333, 4287, 4457, 4770, 4915, 4768, 4616, 4769, 4917,
4916, 4458, 5060, 4461, 4334, 4323, 4332, 5209, 4460, 5058, 5062, 5063, 4615, 4463, 4921, 4772,
4920, 4321, 4138, 5059, 4462)
class(hc2) <- "hclust"
# Create merged hclust object (Following the method https://stackoverflow.com/q/49541604/4923935)
hcMerge <- as.hclust(merge(as.dendrogram(hc1), as.dendrogram(hc2)))
绘制 hclust 对象:
plot(hc1)
plot(hc2)
plot(hcMerge)
可以看出
plot(hc1)
中叶子节点的顺序和plot(hcMerge)
中这些节点的顺序是不一样的。所以这是plot(hc2)
。 当hc1
和hc2
合并时,如何保持叶节点的顺序?结果图应该是左边是plot(hc1)
,右边是plot(hc2)
,并且两个组件通过树状图连接。我想弄清楚为什么合并会更改节点顺序以及如何保留它。