Provides a plot method for parttree objects.
Usage
# S3 method for class 'parttree'
plot(
x,
raw = TRUE,
border = "black",
fill_alpha = 0.3,
expand = TRUE,
jitter = FALSE,
add = FALSE,
...
)Arguments
- x
A parttree data frame.
- raw
Logical. Should the raw (original) data points be plotted too? Default is TRUE.
- border
Colour of the partition borders (edges). Default is "black". To remove the borders altogether, specify as
NA.- fill_alpha
Numeric in the range
[0,1]. Alpha transparency of the filled partition rectangles. Default is0.3.- expand
Logical. Should the partition limits be expanded to to meet the edge of the plot axes? Default is
TRUE. IfFALSE, then the partition limits will extend only until the range of the raw data.- jitter
Logical. Should the raw points be jittered? Default is
FALSE. Only evaluated ifraw = TRUE.- add
Logical. Add to an existing plot? Default is
FALSE.- ...
Additional arguments passed down to
tinyplot.
Value
No return value, called for side effect of producing a plot.
No return value; called for its side effect of producing a plot.
Examples
library("parttree")
#
## rpart trees
library("rpart")
rp = rpart(Kyphosis ~ Start + Age, data = kyphosis)
# A parttree object is just a data frame with additional attributes
(rp_pt = parttree(rp))
#> node Kyphosis path xmin
#> 1 3 present Start < 8.5 -Inf
#> 2 4 absent Start >= 8.5 --> Start >= 14.5 14.5
#> 3 10 absent Start >= 8.5 --> Start < 14.5 --> Age < 55 8.5
#> 4 22 absent Start >= 8.5 --> Start < 14.5 --> Age >= 55 --> Age >= 111 8.5
#> 5 23 present Start >= 8.5 --> Start < 14.5 --> Age >= 55 --> Age < 111 8.5
#> xmax ymin ymax
#> 1 8.5 -Inf Inf
#> 2 Inf -Inf Inf
#> 3 14.5 -Inf 55
#> 4 14.5 111 Inf
#> 5 14.5 55 111
attr(rp_pt, "parttree")
#> $xvar
#> [1] "Start"
#>
#> $yvar
#> [1] "Age"
#>
#> $xrange
#> [1] 1 18
#>
#> $yrange
#> [1] 1 206
#>
#> $response
#> [1] "Kyphosis"
#>
#> $call
#> rpart(formula = Kyphosis ~ Start + Age, data = kyphosis)
#>
#> $na.action
#> NULL
#>
#> $flip
#> [1] FALSE
#>
#> $raw_data
#> NULL
#>
# simple plot
plot(rp_pt)
# removing the (recursive) partition borders helps to emphasise overall fit
plot(rp_pt, border = NA)
# customize further by passing extra options to (tiny)plot
plot(
rp_pt,
border = NA, # no partition borders
pch = 16, # filled points
alpha = 0.6, # point transparency
grid = TRUE, # background grid
palette = "classic", # new colour palette
xlab = "Topmost vertebra operated on", # custom x title
ylab = "Patient age (months)", # custom y title
main = "Tree predictions: Kyphosis recurrence" # custom title
)
#
## conditional inference trees from partyit
library("partykit")
ct = ctree(Species ~ Petal.Length + Petal.Width, data = iris)
ct_pt = parttree(ct)
plot(ct_pt, pch = 19, palette = "okabe", main = "ctree predictions: iris species")
#> Error in eval(raw_data): object 'ct' not found
## rpart via partykit
rp2 = as.party(rp)
parttree(rp2)
#> node Kyphosis path xmin
#> 3 3 absent Start < 8.5 --> Start < 14.5 14.5
#> 5 5 absent Start < 8.5 --> Start >= 14.5 --> Age < 55 8.5
#> 7 7 absent Start < 8.5 --> Start >= 14.5 --> Age >= 55 --> Age < 111 8.5
#> 8 8 present Start < 8.5 --> Start >= 14.5 --> Age >= 55 --> Age >= 111 8.5
#> 9 9 present Start >= 8.5 -Inf
#> xmax ymin ymax
#> 3 Inf -Inf Inf
#> 5 14.5 -Inf 55
#> 7 14.5 111 Inf
#> 8 14.5 55 111
#> 9 8.5 -Inf Inf
#
## various front-end frameworks are also supported, e.g.
# tidymodels
# install.packages("parsnip")
library(parsnip)
decision_tree() |>
set_engine("rpart") |>
set_mode("classification") |>
fit(Species ~ Petal.Length + Petal.Width, data=iris) |>
parttree() |>
plot(main = "This time brought to you via parsnip...")
# mlr3 (NB: use `keep_model = TRUE` for mlr3 learners)
# install.packages("mlr3")
library(mlr3)
task_iris = TaskClassif$new("iris", iris, target = "Species")
task_iris$formula(rhs = "Petal.Length + Petal.Width")
#> Species ~ `Petal.Length + Petal.Width`
#> NULL
fit_iris = lrn("classif.rpart", keep_model = TRUE) # NB!
fit_iris$train(task_iris)
plot(parttree(fit_iris), main = "... and now mlr3")