重新定位并增加使用 R 'plot' 函数生成的树状图周围边界的权重

Repositioning and increasing the weight of borders around dendrogram produced with R 'plot' function

我正在尝试使用 rect.hclust 函数将树状图切割成三个 类,但是当我导出图形时,它会切断图形底部的边框。另外,我想增加边框的权重,但我不知道该怎么做,因为这个函数似乎不存在 lwd 参数。我该怎么做才能修复这些参数?

数据:

cluster <- data.frame(plot=c(1,
                             2,
                             3,
                             4,
                             5,
                             6,
                             7,
                             8,
                             9,
                             10,
                             11,
                             12,
                             13,
                             14,
                             15,
                             16,
                             17,
                             18,
                             19,
                             20),
                      meas1 = c(443,
                                836,
                                903,
                                684,
                                94,
                                125,
                                733,
                                846,
                                625,
                                234,
                                437,
                                775,
                                269,
                                774,
                                17,
                                502,
                                80,
                                51,
                                523,
                                229),
                      meas2 = c(735,
                                574,
                                793,
                                261,
                                961,
                                136,
                                404,
                                138,
                                45,
                                935,
                                698,
                                675,
                                594,
                                497,
                                152,
                                153,
                                30,
                                667,
                                547,
                                745),
                      meas3 = c(23,
                                526,
                                36,
                                93,
                                708,
                                970,
                                399,
                                111,
                                456,
                                439,
                                569,
                                503,
                                337,
                                213,
                                399,
                                850,
                                614,
                                491,
                                28,
                                452))

层次聚类和树状图生成代码:

#Generate distance matrix
dist_mat <- dist(cluster, method = 'euclidean')

#Hierarchical clustering 
hclust_avg <- hclust(dist_mat, method = 'average')

#Cut into 3 classes
cut_avg <- cutree(hclust_avg, k = 3)

#Plot dendrogram
plot(hclust_avg, xlab = "", ylab = "Euclidean Distance", sub = "", 
     main = "Cluster Dendrogram", lwd = 2)

#Generate borders around each group
rect.hclust(hclust_avg, k=3, border = 2:6)

导出图表如下所示:

我需要红-绿-蓝边框更粗(更高的边框权重),并且我还需要它们在图表底部不被切断。

我通过在绘制矩形之前将图形边距设置为零来绕过矩形下边缺失的问题。

矩形的线宽可以通过设置par(lwd)来设置,例如par(lwd=4),如下例所示:

cluster <- data.frame(plot=1:20,
                      meas1 = c(443,
                                836,
                                903,
                                684,
                                94,
                                125,
                                733,
                                846,
                                625,
                                234,
                                437,
                                775,
                                269,
                                774,
                                17,
                                502,
                                80,
                                51,
                                523,
                                229),
                      meas2 = c(735,
                                574,
                                793,
                                261,
                                961,
                                136,
                                404,
                                138,
                                45,
                                935,
                                698,
                                675,
                                594,
                                497,
                                152,
                                153,
                                30,
                                667,
                                547,
                                745),
                      meas3 = c(23,
                                526,
                                36,
                                93,
                                708,
                                970,
                                399,
                                111,
                                456,
                                439,
                                569,
                                503,
                                337,
                                213,
                                399,
                                850,
                                614,
                                491,
                                28,
                                452))


#Generate distance matrix
dist_mat <- dist(cluster, method = 'euclidean')

#Hierarchical clustering 
hclust_avg <- hclust(dist_mat, method = 'average')

#Cut into 3 classes
cut_avg <- cutree(hclust_avg, k = 3)

pars <- par()
#Plot dendrogram
plot(hclust_avg, xlab = "", ylab = "Euclidean Distance", sub = "", 
     main = "Cluster Dendrogram", lwd = 2)
par(lwd=4, mar=c(0,0,0,0))
#Generate borders around each group
rect.hclust(hclust_avg, k=3, border = 2:6)


# reset par
par(lwd=pars$lwd, mar=pars$mar)

reprex package (v0.3.0)

于 2020-06-30 创建