如何偏移、对齐和增加树状图标签的填充

问题描述 投票:0回答:1

我正在尝试在 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)

这会产生以下树状图

Dendogram

如您所见,即使放大,标签也难以辨认。因此,我正在尝试执行以下操作:

  • 将标签向右偏移
  • 将标签向左对齐
  • 增加顶部和底部的填充,最好是标签和图表本身的填充(以便标签仍然与叶子对齐)

我尝试以各种方式做到这一点,包括使用factoextra、ggplot2(因为factoextra 就是用它来制作图表的)和 dendoextra。然而,我似乎不知道如何做我想要实现的目标。在花了相当多的时间反复试验、在网上寻找类似的问题并阅读软件包的官方文档之后,我决定在线寻求帮助。

作为旁注,虽然我使用factoextra,但我并不不愿意使用其他方式来创建树状图,只要它保留相同的视觉风格(即簇是彩色的)。我唯一的要求是我最终能够使用plotly(无论是ggplotly还是baseplotly),以便能够放大单个集群。

r ggplot2 plotly hierarchical-clustering
1个回答
0
投票

我找不到内置方法来完成这项工作,就像

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

updated plot

© www.soinside.com 2019 - 2024. All rights reserved.