| Title: | 'ggplot' Visualizations for the 'partykit' Package |
| Version: | 1.0.0.1 |
| Copyright: | file inst/COPYRIGHTS |
| Description: | Extends 'ggplot2' functionality to the 'partykit' package. 'ggparty' provides the necessary tools to create clearly structured and highly customizable visualizations for tree-objects of the class 'party'. |
| Maintainer: | Martin Borkovec <martin.borkovec@skyforge.at> |
| Depends: | R (≥ 3.4.0), ggplot2, partykit |
| Imports: | grid, gtable, utils, checkmate, methods, survival, rlang |
| Suggests: | testthat, mlbench, AER, coin, vdiffr, knitr, rmarkdown,pander, MASS, TH.data |
| License: | GPL-2 |GPL-3 |
| URL: | https://github.com/martin-borkovec/ggparty |
| BugReports: | https://github.com/martin-borkovec/ggparty/issues |
| Encoding: | UTF-8 |
| RoxygenNote: | 7.3.2 |
| VignetteBuilder: | knitr |
| NeedsCompilation: | no |
| Packaged: | 2025-07-10 16:16:46 UTC; hornik |
| Author: | Martin Borkovec [aut, cre], Niyaz Madin [aut], Hadley Wickham [ctb], Winston Chang [ctb], Lionel Henry [ctb], Thomas Lin Pedersen [ctb], Kohske Takahashi [ctb], Claus Wilke [ctb], Kara Woo [ctb], Hiroaki Yutani [ctb] |
| Repository: | CRAN |
| Date/Publication: | 2025-07-10 16:31:21 UTC |
autoplot methods for party objects
Description
autoplot methods for party objects
Usage
## S3 method for class 'party'autoplot(object, ...)## S3 method for class 'constparty'autoplot(object, ...)## S3 method for class 'modelparty'autoplot(object, plot_var = NULL, ...)## S3 method for class 'lmtree'autoplot(object, plot_var = NULL, show_fit = TRUE, ...)Arguments
object | object of class party. |
... | additional parameters |
plot_var | Which covariate to plot against response. Defaults to secondcolumn in 'data' of tree. |
show_fit | If TRUE 'fitted_values' are drawn. |
Examples
library(ggparty)data("WeatherPlay", package = "partykit")sp_o <- partysplit(1L, index = 1:3)sp_h <- partysplit(3L, breaks = 75)sp_w <- partysplit(4L, index = 1:2)pn <- partynode(1L, split = sp_o, kids = list( partynode(2L, split = sp_h, kids = list( partynode(3L, info = "yes"), partynode(4L, info = "no"))), partynode(5L, info = "yes"), partynode(6L, split = sp_w, kids = list( partynode(7L, info = "yes"), partynode(8L, info = "no")))))py <- party(pn, WeatherPlay)autoplot(py)Draw edges
Description
Draws edges between children and parent nodes. Wrapper forggplot2::geom_segment()
Usage
geom_edge( mapping = NULL, nudge_x = 0, nudge_y = 0, ids = NULL, show.legend = NA, ...)Arguments
mapping | Mapping of |
nudge_x,nudge_y | Nudge labels. |
ids | Choose which edges to draw by their children's ids. |
show.legend |
|
... | Additional arguments for |
See Also
Examples
library(ggparty)data("WeatherPlay", package = "partykit")sp_o <- partysplit(1L, index = 1:3)sp_h <- partysplit(3L, breaks = 75)sp_w <- partysplit(4L, index = 1:2)pn <- partynode(1L, split = sp_o, kids = list( partynode(2L, split = sp_h, kids = list( partynode(3L, info = "yes"), partynode(4L, info = "no"))), partynode(5L, info = "yes"), partynode(6L, split = sp_w, kids = list( partynode(7L, info = "yes"), partynode(8L, info = "no")))))py <- party(pn, WeatherPlay)ggparty(py) + geom_edge() + geom_edge_label() + geom_node_label(aes(label = splitvar), ids = "inner") + geom_node_label(aes(label = info), ids = "terminal")Draw edge labels
Description
Label edges with corresponding split breaks
Usage
geom_edge_label( mapping = NULL, nudge_x = 0, nudge_y = 0, ids = NULL, shift = 0.5, label.size = 0, splitlevels = seq_len(100), max_length = NULL, parse_all = FALSE, parse = TRUE, ...)Arguments
mapping | Mapping of |
nudge_x,nudge_y | Nudge label. |
ids | Choose which splitbreaks to label by their children's ids. |
shift | Value in (0,1). Moves label along corresponding edge. |
label.size | |
splitlevels | Which levels of split to plot. This may be useful in thepresence of many factor levels for one split break. |
max_length | If providedbreaks_label levels will be truncated to the specified length. |
parse_all | Defaults to |
parse | Needs to be true in order to parse inequality signs ofbreaks_label. |
... | Additional arguments for |
See Also
Examples
library(ggparty)data("WeatherPlay", package = "partykit")sp_o <- partysplit(1L, index = 1:3)sp_h <- partysplit(3L, breaks = 75)sp_w <- partysplit(4L, index = 1:2)pn <- partynode(1L, split = sp_o, kids = list( partynode(2L, split = sp_h, kids = list( partynode(3L, info = "yes"), partynode(4L, info = "no"))), partynode(5L, info = "yes"), partynode(6L, split = sp_w, kids = list( partynode(7L, info = "yes"), partynode(8L, info = "no")))))py <- party(pn, WeatherPlay)ggparty(py) + geom_edge() + geom_edge_label() + geom_node_label(aes(label = splitvar), ids = "inner") + geom_node_label(aes(label = info), ids = "terminal")Draw (multi-line) labels at nodes
Description
geom_node_splitvar() andgeom_node_info() are simplified versions ofgeom_node_label() with the respective defaults to either label the split variablesfor all inner nodes or the info for all terminal nodes.
Usage
geom_node_label( mapping = NULL, data = NULL, line_list = NULL, line_gpar = NULL, ids = NULL, position = "identity", ..., parse = FALSE, nudge_x = 0, nudge_y = 0, label.padding = unit(0.25, "lines"), label.r = unit(0.15, "lines"), label.size = 0.25, label.col = NULL, label.fill = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)geom_node_info( mapping = NULL, nudge_x = 0, nudge_y = 0, ids = NULL, label.padding = unit(0.5, "lines"), ...)geom_node_splitvar( mapping = NULL, nudge_x = 0, nudge_y = 0, label.padding = unit(0.5, "lines"), ids = NULL, ...)Arguments
mapping |
|
data | The data to be displayed in this layer. There are threeoptions: If A A |
line_list | Use this only if you want a multi-line label with thepossibility to override the aesthetics mapping for each line specificallywith fixed graphical parameters. In this case, don't map anything to |
line_gpar | List of lists containing line-specific graphical parameters.Only use inconjunction with |
ids | Select for which nodes to draw a label. Can be |
position | A position adjustment to use on the data for this layer. Thiscan be used in various ways, including to prevent overplotting andimproving the display. The
|
... | Additional arguments to layer. |
parse | If |
nudge_x,nudge_y | Adjust position of label. |
label.padding | Amount of padding around label. Defaults to 0.25 lines. |
label.r | Radius of rounded corners. Defaults to 0.15 lines. |
label.size | Size of label border, in mm. |
label.col | Border colour. |
label.fill | Background colour. |
na.rm | If |
show.legend | logical. Should this layer be included in the legends? |
inherit.aes | If |
Details
geom_node_label() is a modified version ofggplot2::geom_label(). Thismodification allows for labels with multiple lines and line specific graphicalparameters.
See Also
Examples
library(ggparty)data("WeatherPlay", package = "partykit")sp_o <- partysplit(1L, index = 1:3)sp_h <- partysplit(3L, breaks = 75)sp_w <- partysplit(4L, index = 1:2)pn <- partynode(1L, split = sp_o, kids = list( partynode(2L, split = sp_h, kids = list( partynode(3L, info = "yes"), partynode(4L, info = "no"))), partynode(5L, info = "yes"), partynode(6L, split = sp_w, kids = list( partynode(7L, info = "yes"), partynode(8L, info = "no")))))py <- party(pn, WeatherPlay)ggparty(py) + geom_edge() + geom_edge_label() + geom_node_label(aes(label = splitvar), ids = "inner") + geom_node_label(aes(label = info), ids = "terminal")######################################data("TeachingRatings", package = "AER")tr <- subset(TeachingRatings, credits == "more")tr_tree <- lmtree(eval ~ beauty | minority + age + gender + division + native + tenure, data = tr, weights = students, caseweights = FALSE)data("TeachingRatings", package = "AER")tr <- subset(TeachingRatings, credits == "more")tr_tree <- lmtree(eval ~ beauty | minority + age + gender + division + native + tenure, data = tr, weights = students, caseweights = FALSE)ggparty(tr_tree, terminal_space = 0.5, add_vars = list(p.value = "$node$info$p.value")) + geom_edge(size = 1.5) + geom_edge_label(colour = "grey", size = 6) + geom_node_plot(gglist = list(geom_point(aes(x = beauty, y = eval, col = tenure, shape = minority), alpha = 0.8), theme_bw(base_size = 15)), scales = "fixed", id = "terminal", shared_axis_labels = TRUE, shared_legend = TRUE, legend_separator = TRUE, predict = "beauty", predict_gpar = list(col = "blue", size = 1.2) ) + geom_node_label(aes(col = splitvar), line_list = list(aes(label = paste("Node", id)), aes(label = splitvar), aes(label = paste("p =", formatC(p.value, format = "e", digits = 2)))), line_gpar = list(list(size = 12, col = "black", fontface = "bold"), list(size = 20), list(size = 12)), ids = "inner") + geom_node_label(aes(label = paste0("Node ", id, ", N = ", nodesize)), fontface = "bold", ids = "terminal", size = 5, nudge_y = 0.01) + theme(legend.position = "none")Draw plots at nodes
Description
Additional component for a [ggparty()] that allows to create in each node aggplot with its data. #'
Usage
geom_node_plot( plot_call = "ggplot", gglist = NULL, width = 1, height = 1, size = 1, ids = "terminal", scales = "fixed", nudge_x = 0, nudge_y = 0, shared_axis_labels = FALSE, shared_legend = TRUE, predict = NULL, predict_gpar = NULL, legend_separator = FALSE)Arguments
plot_call | Any function that generates a 'ggplot2' object. |
gglist | List of additional 'gg' components. Columns of 'data' of nodes can bemapped. Additionally 'fitted_values' and 'residuals' can be mapped if present in'party' of 'ggparty()' |
width | Expansion factor for viewport's width. |
height | Expansion factor for viewport's height. |
size | Expansion factor for viewport's size. |
ids | Id's to plot. Numeric, "terminal", "inner" or "all". Defaultsto "terminal". |
scales | See [ggplot2::facet_wrap()] |
nudge_x,nudge_y | Nudges node plot. |
shared_axis_labels | If TRUE only one pair of axes labels is plotted inthe terminal space. Only recommended if 'ids' "terminal" or "all". |
shared_legend | If 'TRUE' one shared legend is plotted at the bottom ofthe tree. |
predict | Character string specifying variable for which predictions should be plotted. |
predict_gpar | Named list containing arguments to be passed to the'geom_line()' call of predicted values. |
legend_separator | If 'TRUE' line between legend and tree is drawn. |
See Also
[ggparty()]
Examples
library(ggparty)airq <- subset(airquality, !is.na(Ozone))airct <- ctree(Ozone ~ ., data = airq)ggparty(airct, horizontal = TRUE, terminal_space = 0.6) + geom_edge() + geom_edge_label() + geom_node_splitvar() + geom_node_plot(gglist = list( geom_density(aes(x = Ozone))), shared_axis_labels = TRUE)############################################################### Plot with ggparty## Demand for economics journals datadata("Journals", package = "AER")Journals <- transform(Journals, age = 2000 - foundingyear, chars = charpp * pages)## linear regression tree (OLS)j_tree <- lmtree(log(subs) ~ log(price/citations) | price + citations + age + chars + society, data = Journals, minsize = 10, verbose = TRUE)pred_df <- get_predictions(j_tree, ids = "terminal", newdata = function(x) { data.frame( citations = 1, price = exp(seq(from = min(x$`log(price/citations)`), to = max(x$`log(price/citations)`), length.out = 100)))})ggparty(j_tree, terminal_space = 0.8) + geom_edge() + geom_edge_label() + geom_node_splitvar() + geom_node_plot(gglist = list(aes(x = `log(price/citations)`, y = `log(subs)`), geom_point(), geom_line(data = pred_df, aes(x = log(price/citations), y = prediction), col = "red")))Create data.frame with predictions for each node
Description
Create data.frame with predictions for each node
Usage
get_predictions(party_object, ids, newdata_fun, predict_arg = NULL)Arguments
party_object | object of class 'party' |
ids | Id's to plot. Numeric, "terminal", "inner" or "all". MUST be identicalto 'ids' of [geom_node_plot()] used to plot this data. |
newdata_fun | function which takes 'data' of node and returns 'newdata'for 'predict()' |
predict_arg | list of additional arguments passed to [predict()] |
Create a new ggparty plot
Description
'ggplot2' extension for objects of class 'party'. Creates a 'data.frame' froman object of class 'party' and calls [ggplot2::ggplot()]
Usage
ggparty( party, horizontal = FALSE, terminal_space, layout = NULL, add_vars = NULL)Arguments
party | Object of class 'party'. |
horizontal | If 'TRUE' plot will be horizontal. |
terminal_space | Proportion of the plot that should be reserved forthe terminal nodeplots. Defaults to '2 / (depth(party) + 2)'. |
layout | Optional layout adjustment. Overwrites the coordinates of thespecified nodes. Must be 'data.frame' containing thecolumns 'id', 'x' and 'y'. With 'x' and 'y' values between 0 and 1. |
add_vars | Named list containing either string(s) specifying the locationsof elements to be extracted fromeach node of 'party' or function(s) of corresponding row of plot data and node.In either case returned object has to be of length 1.If the data is supposed to be accessible by [geom_node_plot()] the respectivelist entry hasto be named with the prefix '"nodedata_"' and be a function returning a listof same length as 'nodesize'. |
Details
'ggparty' can be called directly with an object of class 'party', which willconvert it to a suitable 'data.frame' and pass it to a call to 'ggplot' with asthe 'data' argument. As usual, additional components can then be added with'+'.
The nodes will be spaced equally in the unit square. Specifying'terminal_size' allows to increase or decrease the area for plots of theterminal nodes.
If one of the list entries supplied to 'add_vars' is a function, it has to takeexactly two arguments,namely 'data' (the corresponding row of the plot_data data frame) and 'node'(the corresponding node, i.e. 'party_object[i]')
See Also
[geom_edge()], [geom_edge_label()], [geom_node_label()],[autoplot.party()], [geom_node_plot()]
Examples
library(ggparty)data("WeatherPlay", package = "partykit")sp_o <- partysplit(1L, index = 1:3)sp_h <- partysplit(3L, breaks = 75)sp_w <- partysplit(4L, index = 1:2)pn <- partynode(1L, split = sp_o, kids = list( partynode(2L, split = sp_h, kids = list( partynode(3L, info = "yes"), partynode(4L, info = "no"))), partynode(5L, info = "yes"), partynode(6L, split = sp_w, kids = list( partynode(7L, info = "yes"), partynode(8L, info = "no")))))py <- party(pn, WeatherPlay)ggparty(py) + geom_edge() + geom_edge_label() + geom_node_label(aes(label = splitvar), ids = "inner") + geom_node_label(aes(label = info), ids = "terminal")apparantly needs to be exported
Description
apparantly needs to be exported
Usage
## S3 method for class 'nodeplotgrob'makeContent(x)Arguments
x | nodeplotgrob |