Movatterモバイル変換


[0]ホーム

URL:


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 ofx,y,xend andyend defaults toids' andtheir parent's coordinates. Other mappings can be added here asaes().

nudge_x,nudge_y

Nudge labels.

ids

Choose which edges to draw by their children's ids.

show.legend

logical Seeggplot2::layer().

...

Additional arguments forggplot2::geom_segment().

See Also

ggparty(),geom_edge()

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 oflabel label defaults tobreaks_label. Othermappings can be added here asaes().

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

Seeggplot2::geom_label().

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 toFALSE, in which case everything but the inequalitysigns ofbreaks_label are deparsed. IfTRUE completebreaks_label are parsed.

parse

Needs to be true in order to parse inequality signs ofbreaks_label.

...

Additional arguments forggplot2::geom_label().

See Also

ggparty()

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

x andy are mapped per default to the node's coordinates. Ifyou don't want to set line specific graphical parameters, you can also maplabel here. Otherwise setlabels inline_list.

data

The data to be displayed in this layer. There are threeoptions:

IfNULL, the default, the data is inherited from the plotdata as specified in the call toggplot().

Adata.frame, or other object, will override the plotdata. All objects will be fortified to produce a data frame. Seefortify() for which variables will be created.

Afunction will be called with a single argument,the plot data. The return value must be adata.frame, andwill be used as the layer data. Afunction can be createdfrom aformula (e.g.~ head(.x, 10)).

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 tolabel in theaes() supplied tomapping, but instead pass here a list ofaes() with theonly mapped variablein eachbeinglabel.Other aesthetic mappings still can be passed tomapping and will apply toall lines and the border, unless overwritten byline_gpar.The order of the list represents the order of the plotted lines.

line_gpar

List of lists containing line-specific graphical parameters.Only use inconjunction withline_list. Has to contain the same number of lists as areaes() inline_list. First list applies to first line, and so on.

ids

Select for which nodes to draw a label. Can be"inner","terminal","all" ornumeric vector of ids.

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. Theposition argument accepts the following:

  • The result of calling a position function, such asposition_jitter().This method allows for passing extra arguments to the position.

  • A string naming the position adjustment. To give the position as astring, strip the function name of theposition_ prefix. For example,to useposition_jitter(), give the position as"jitter".

  • For more information and other ways to specify the position, see thelayer position documentation.

...

Additional arguments to layer.

parse

IfTRUE, the labels will be parsed into expressions. Can alsobe specified per line vialine_gpar.

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

IfFALSE, the default, missing values are removed witha warning. IfTRUE, missing values are silently removed.

show.legend

logical. Should this layer be included in the legends?NA, the default, includes if any aesthetics are mapped.FALSE never includes, andTRUE always includes.It can also be a named logical vector to finely select the aesthetics todisplay.

inherit.aes

IfFALSE, overrides the default aesthetics,rather than combining with them. This is most useful for helper functionsthat define both data and aesthetics and shouldn't inherit behaviour fromthe default plot specification, e.g.borders().

Details

geom_node_label() is a modified version ofggplot2::geom_label(). Thismodification allows for labels with multiple lines and line specific graphicalparameters.

See Also

ggparty()

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


[8]ページ先頭

©2009-2025 Movatter.jp