我正在尝试在 R 中创建树状图。到目前为止,我已经使用了factoextra 包,特别是
fviz_dend
函数。代码如下:
num_data_scaled <- scale(num_data)
res.hc <- eclust(num_data_scaled, FUNcluster = "hclust", hc_metric = "euclidean", hc_method = "ward.D2", k = 6)
fviz_cluster(res.hc, geom = "point")
p <- fviz_dend(res.hc, horiz = T, cex = 0.6)
ggplotly(p)
这会产生以下树状图
如您所见,即使放大,标签也难以辨认。因此,我正在尝试执行以下操作:
我尝试以各种方式做到这一点,包括使用factoextra、ggplot2(因为factoextra 就是用它来制作图表的)和 dendoextra。然而,我似乎不知道如何做我想要实现的目标。在花了相当多的时间反复试验、在网上寻找类似的问题并阅读软件包的官方文档之后,我决定在线寻求帮助。
作为旁注,虽然我使用factoextra,但我并不不愿意使用其他方式来创建树状图,只要它保留相同的视觉风格(即簇是彩色的)。我唯一的要求是我最终能够使用plotly(无论是ggplotly还是baseplotly),以便能够放大单个集群。
我找不到内置方法来完成这项工作,就像
ggplot
到 plotly
转换中通常的情况一样。
我确实想出了一个解决方法。
由于您可能想要更改文本大小,请注意代码中
<<-
右侧有 2 个值。第一个是文本大小(在我的代码中设置为 10)和文本位置(在我的代码中是 "middle right"
- - 相当于左对齐)。
这是修复情节的 UDF
fixer <- function(plt) {
plt <- plotly_build(plt) # make sure the plots built
lapply(1:length(plt$x$data), function(j) { # for each trace in plot
if(isTRUE(plt$x$data[[j]]$mode == "text")) { # if it's a text trace
plt$x$data[[k]]$textfont$size <<- 10 # set new font size
plt$x$data[[k]]$textposition <<- "middle right" # set text alignment
}
})
plt # return the updated plot
}
要使用此函数,请在调用绘图时调用它。
ggplotly(p) %>% fixer()
您没有提供数据,但使用数据后的效果如下
USArrests