Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
warning = FALSE,
out.width = "90%",
# fig.width = 8,
# dpi = 300,
asp = 0.625
)
## ----setup--------------------------------------------------------------------
library(parttree) # This package
library(rpart) # For fitting decisions trees
# install.packages("palmerpenguins")
data("penguins", package = "palmerpenguins")
head(penguins)
## ----thread_control, echo=-1--------------------------------------------------
data.table::setDTthreads(2)
## ----tree---------------------------------------------------------------------
tree = rpart(species ~ flipper_length_mm + bill_length_mm, data = penguins)
tree
## ----rpart_plot---------------------------------------------------------------
plot(tree, compress = TRUE)
text(tree, use.n = TRUE)
## ----penguin_cl_plot----------------------------------------------------------
ptree = parttree(tree)
plot(ptree)
## ----ptree--------------------------------------------------------------------
# See also `attr(ptree, "parttree")`
ptree
## ----penguin_cl_plot_custom---------------------------------------------------
plot(ptree, pch = 16, palette = "classic", alpha = 0.75, grid = TRUE)
## ----penguin_reg_plot---------------------------------------------------------
tree_cont = rpart(body_mass_g ~ flipper_length_mm + bill_length_mm, data = penguins)
tree_cont |>
parttree() |>
plot(pch = 16, palette = "viridis")
## ----penguin_ctree_plot-------------------------------------------------------
library(partykit)
ctree(species ~ flipper_length_mm + bill_length_mm, data = penguins) |>
parttree() |>
plot(pch = 16, palette = "classic", alpha = 0.5)
## ----titanic_plot-------------------------------------------------------------
set.seed(123) ## For consistent jitter
library(parsnip)
library(titanic) ## Just for a different data set
titanic_train$Survived = as.factor(titanic_train$Survived)
## Build our tree using parsnip (but with rpart as the model engine)
ti_tree =
decision_tree() |>
set_engine("rpart") |>
set_mode("classification") |>
fit(Survived ~ Pclass + Age, data = titanic_train)
## Now pass to parttree and plot
ti_tree |>
parttree() |>
plot(pch = 16, jitter = TRUE, palette = "dark", alpha = 0.7)
## ----penguin_cl_ggplot2-------------------------------------------------------
library(ggplot2)
theme_set(theme_linedraw())
## re-using the tree model object from above...
ggplot(data = penguins, aes(x = flipper_length_mm, y = bill_length_mm)) +
geom_point(aes(col = species)) +
geom_parttree(data = tree, aes(fill=species), alpha = 0.1)
## ----penguin_reg_ggplot2------------------------------------------------------
## re-using the tree_cont model object from above...
ggplot(data = penguins, aes(x = flipper_length_mm, y = bill_length_mm)) +
geom_parttree(data = tree_cont, aes(fill=body_mass_g), alpha = 0.3) +
geom_point(aes(col = body_mass_g)) +
scale_colour_viridis_c(aesthetics = c('colour', 'fill')) # NB: Set colour + fill together
## ----ptree_redux--------------------------------------------------------------
# ptree = parttree(tree)
ptree
## ----penguin_cl_ggplot_mismatch-----------------------------------------------
## First, redo our first plot but this time switch the x and y variables
p3 = ggplot(
data = penguins,
aes(x = bill_length_mm, y = flipper_length_mm) ## Switched!
) +
geom_point(aes(col = species))
## Add on our tree (and some preemptive titling..)
p3 +
geom_parttree(data = tree, aes(fill = species), alpha = 0.1) +
labs(
title = "Oops!",
subtitle = "Looks like a mismatch between our x and y axes..."
)
## ----penguin_cl_ggplot_mismatch_flip------------------------------------------
p3 +
geom_parttree(
data = tree, aes(fill = species), alpha = 0.1,
flip = TRUE ## Flip the orientation
) +
labs(title = "That's better")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.