#' @title Plots for Hierarchical Clustering Learners
#'
#' @description
#' Visualizations for hierarchical clusters.
#' The argument `type` controls what kind of plot is drawn.
#' Possible choices are:
#'
#' * `"dend"` (default): Dendrograms using \CRANpkg{ggdendro} package.
#' * `"scree"`: Scree plot that shows the number of possible clusters on the x-axis and the height on the y-axis.
#'
#' @param object ([mlr3cluster::LearnerClustAgnes] | [mlr3cluster::LearnerClustDiana] | [mlr3cluster::LearnerClustHclust]).
#' @param task ([mlr3::Task])\cr
#' Optionally, pass the task to add labels of observations to a `hclust` dendrogram.
#' Labels are set via the row names of the task.
#' @template param_type
#' @template param_theme
#' @param theme_dendro (`logical(1)`)\cr
#' If `TRUE` (default), the special dendrogram theme from \CRANpkg{ggdendro} package is used in plot `"dend"`.
#' Set to `FALSE` to use the theme passed in `theme`.
#' @param ... (ignored).
#'
#' @return [ggplot2::ggplot()].
#'
#' @export
#' @examples
#' if (requireNamespace("mlr3")) {
#' library(mlr3)
#' library(mlr3cluster)
#' library(mlr3viz)
#'
#' task = tsk("usarrests")
#'
#' # agnes clustering
#' learner = lrn("clust.agnes")
#' learner$train(task)
#' autoplot(learner)
#'
#' # diana clustering
#' learner = lrn("clust.diana")
#' learner$train(task)
#' autoplot(learner)
#'
#' # hclust clustering
#' learner = lrn("clust.hclust")
#' learner$train(task)
#' autoplot(learner, type = "scree")
#' }
autoplot.LearnerClustHierarchical = function(object, type = "dend", task = NULL, theme = theme_minimal(), theme_dendro = TRUE, ...) { # nolint
assert_string(type)
if (is.null(object$model)) {
stopf("Learner '%s' must be trained first", object$id)
}
if (!("hierarchical" %in% object$properties)) {
stopf("Learner '%s' must be hierarchical", object$id)
}
switch(type,
"dend" = {
require_namespaces("ggdendro")
if (!is.null(task) && !is.null(task$row_names)) {
object$model$labels = task$row_names$row_name[match(object$model$order, task$row_names$row_id)]
}
ggdendro::ggdendrogram(as.dendrogram(object$model), theme_dendro = theme_dendro, ...) +
if (!theme_dendro) theme else geom_blank()
},
"scree" = {
data = data.table(Height = object$model$height, Clusters = seq(length(object$model$height), 1))
ggplot(data,
mapping = aes(x = data$Clusters, y = data$Height)) +
geom_line(color = viridis::viridis(1, begin = 0.5)) +
geom_point(
size = 3,
color = viridis::viridis(1, begin = 0.5),
alpha = 0.8) +
xlab("Clusters") +
ylab("Height") +
theme
}
)
}
#' @export
autoplot.LearnerClustAgnes = autoplot.LearnerClustHierarchical
#' @export
autoplot.LearnerClustDiana = autoplot.LearnerClustHierarchical
#' @export
autoplot.LearnerClustHclust = autoplot.LearnerClustHierarchical
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.