{"id":23324784,"url":"https://github.com/aphalo/ggpmisc","last_synced_at":"2026-01-28T16:05:57.316Z","repository":{"id":40625567,"uuid":"317609357","full_name":"aphalo/ggpmisc","owner":"aphalo","description":"R package ggpmisc is an extension to ggplot2 and the Grammar of Graphics","archived":false,"fork":false,"pushed_at":"2026-01-24T17:45:06.000Z","size":30294,"stargazers_count":111,"open_issues_count":25,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-01-25T06:40:12.895Z","etag":null,"topics":["data-analysis","dataviz","ggplot2-annotations","ggplot2-stats","statistics"],"latest_commit_sha":null,"homepage":"https://docs.r4photobiology.info/ggpmisc","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aphalo.png","metadata":{"files":{"readme":"README.Rmd","changelog":"NEWS.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-12-01T16:56:37.000Z","updated_at":"2026-01-24T17:45:09.000Z","dependencies_parsed_at":"2024-03-24T21:22:18.346Z","dependency_job_id":"d5a9aebd-fb67-4eff-9817-0dc4af7e6d52","html_url":"https://github.com/aphalo/ggpmisc","commit_stats":{"total_commits":591,"total_committers":2,"mean_commits":295.5,"dds":0.008460236886632777,"last_synced_commit":"e1120ae1b5b7c30b117df07fd678a4b76dfb6b8d"},"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/aphalo/ggpmisc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aphalo%2Fggpmisc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aphalo%2Fggpmisc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aphalo%2Fggpmisc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aphalo%2Fggpmisc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aphalo","download_url":"https://codeload.github.com/aphalo/ggpmisc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aphalo%2Fggpmisc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28846781,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T15:15:36.453Z","status":"ssl_error","status_checked_at":"2026-01-28T15:15:13.020Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-analysis","dataviz","ggplot2-annotations","ggplot2-stats","statistics"],"created_at":"2024-12-20T18:25:59.431Z","updated_at":"2026-01-28T16:05:57.310Z","avatar_url":"https://github.com/aphalo.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\noutput:\n  github_document:\n    html_preview: TRUE\n---\n\n```{r readme-01, echo = FALSE}\nknitr::opts_chunk$set(\n  fig.asp = 2 / 3,\n  collapse = TRUE,\n  comment = \"#\u003e\",\n  fig.path = \"man/figures/README-\"\n)\n```\n\n# ggpmisc \u003cimg src=\"man/figures/logo.png\" align=\"right\" width=\"150\" /\u003e\n## Miscellaneous Extensions to 'ggplot2'\n\n\u003c!-- badges: start --\u003e\n[![cran version](https://www.r-pkg.org/badges/version-last-release/ggpmisc)](https://cran.r-project.org/package=ggpmisc) \n[![cran checks](https://badges.cranchecks.info/worst/ggpmisc.svg)](https://cran.r-project.org/web/checks/check_results_ggpmisc.html)\n[![ggpmisc status badge](https://aphalo.r-universe.dev/badges/ggpmisc)](https://aphalo.r-universe.dev/ggpmisc)\n[![R-CMD-check](https://github.com/aphalo/ggpmisc/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/aphalo/ggpmisc/actions/workflows/R-CMD-check.yaml)\n[![web site](https://img.shields.io/badge/documentation-ggpmisc-informational.svg)](https://docs.r4photobiology.info/ggpmisc/)\n[![DOI](https://img.shields.io/badge/doi-10.32614/CRAN.package.ggpmisc-blue.svg)](https://doi.org/10.32614/CRAN.package.ggpmisc)\n\u003c!-- badges: end --\u003e\n\n**Current failure of `R-CMD-check.yaml` at GitHub is due to small visual\ndifferences in plots between versions of R, which are not fully addressed by \nthe currently implemented versioning of graphical \"snaps\" used as reference\nfor tests.**\n\n## Purpose\n\nPackage '**ggpmisc**' (Miscellaneous Extensions to 'ggplot2') is a set of\nextensions to R package 'ggplot2' (\u003e= 3.0.0) with emphasis on annotations and\nplotting related to fitted models. Estimates from model fit objects can be\ndisplayed in ggplots as text, model equations, ANOVA and summary table.\nPredicted values, residuals, deviations and weights can be plotted for various \nmodel fit functions. Linear models, polynomial regression, quantile regression, major axis regression, non-linear regression and different approaches to robust and resistant regression, as well as user-defined wrapper functions based on them are supported. In addition, all model fit functions returning objects for which accessors are available or supported by package 'broom' and its extensions are also supported but not as automatically. Labelling based on multiple comparisons supports various _P_ adjustment methods and contrast schemes. Annotation of peaks and valleys in time series, and scales for volcano and quadrant plots as used for gene expression data are also provided. Package '**ggpmisc**' continues to give access to extensions moved as of version 0.4.0\nto package ['**ggpp**'](https://docs.r4photobiology.info/ggpp/).\n\n## Philosophy\n\nPackage '**ggpmisc**' is consistent with the grammar of graphics, and opens new\npossibilities retaining the flexibility inherent to this grammar. Its aim is not\nto automate plotting or annotations in a way suitable for fast data exploration\nby use of a \"fits-all-sizes\" predefined design. Package '**ggpmisc**' together\nwith package '**ggpp**', provide new layer functions, position functions and\nscales. In fact, these packages follow the tenets of the grammar even more\nstrictly than '**ggplot2**' in the distinction between geometries and\nstatistics. The new statistics in '**ggpmisc**' focus mainly on model fitting,\nincluding multiple comparisons among groups. The default annotations are those\nmost broadly valid and of easiest interpretation. We follow R's approach of\nexpecting that users know what they need or want, and will usually want to\nadjust how results from model fits are presented both graphically and textually.\nThe approach and mechanics of plot construction and rendering remain unchanged\nfrom those implemented in package ['**ggplot2**'](https://ggplot2.tidyverse.org/).\n\n## Statistics\n\nStatistics that help with reporting the results of model fits are:\n\n| Statistic               | Returned values\u003cbr\u003e (*default geometry*)          | Methods                                      |\n|:------------------------|:--------------------------------------------------|:---------------------------------------------|\n| **Model equation**      | _parameter estimates_                             |                                              |\n| `stat_poly_eq()`        | equation, *R*\u003csup\u003e2\u003c/sup\u003e, *P*, etc. (`text_npc`) | lm, rlm, lqs, gls, ma, sma, etc. (1, 2, 7)   |\n| `stat_ma_eq()`          | equation, *R*\u003csup\u003e2\u003c/sup\u003e, *P*, etc. (`text_npc`) | lmodel2 (6, 7)                               |\n| `stat_quant_eq()`       | equation, *P*, etc. (`text_npc`)                  | rq (1, 3, 4, 7)                              |\n| `stat_distrmix_eq()`   | equation(s) (`text_npc`)                          | normalmixEM (2, 7)                           |\n| `stat_correlation()`    | correlation, *P*-value, CI (`text_npc`)           | Pearson (*t*), Kendall (*z*), Spearman (*S*) |\n| `stat_fit_glance()`     | equation, *R*\u003csup\u003e2\u003c/sup\u003e, *P*, etc. (`text_npc`) | those supported by 'broom'                   |\n| **Model line**          | _predicted and fitted values_                     |                                              |\n| `stat_poly_line()`      | line + conf. (`smooth`)                           | lm, rlm, lqs, gls, ma, sma, etc. (1, 2, 7)   |\n| `stat_ma_line()`        | line + slope conf. (`smooth`)                     | lmodel2 (6, 7)                               |\n| `stat_quant_line()`     | line + conf. (`smooth`)                           | rq, rqss (1, 3, 4, 7)                        |\n| `stat_quant_band()`     | line + band, 2 or 3 quantiles (`smooth`)          | rq, rqss (1, 4, 5, 7)                        |\n| `stat_distrmix_line()` | lines(s) (`line`)                                 | normalmixEM (2, 7)                           |\n| `stat_fit_augment()`    | predicted and other values (`smooth`)             | those supported by 'broom'                   |\n| `stat_fit_fitted()`     | fitted values (`point`)                           | lm, rlm, lqs, rq, gls, ma, sma, etc. (1, 2, 4, 7, 9) |\n| `stat_fit_deviations()` | deviations from observations (`segment`)          | lm, rlm, lqs, rq, gls, ma, sma, etc. (1, 2, 4, 7, 9) |\n| **Model table**         | _parameter estimates and significance_            |                                              |\n| `stat_fit_tb()`         | ANOVA and summary tables (`table_npc`)            | those supported by 'broom'                   |\n| `stat_fit_tidy()`       | fit results, e.g., for equation (`text_npc`)      | those supported by 'broom'                   |\n| **Contrasts**           | _Tukey, Dunnet and arbitrary pairwise_            |                                              |\n| `stat_multcomp()`       | Multiple comparisons (`label_pairwise` or `text`) | those supported by `glht` (1, 2, 7)          |\n| **Residuals**           | _model fit residuals_                             |                                              |\n| `stat_fit_residuals()`  | residuals (`point`)                               | lm, rlm, lqs, rq, gls, ma, sma, etc. (1, 2, 4, 7, 9) |\n\n: Notes:  (1) *weight* aesthetic supported; (2) user defined model fit functions\nincluding wrappers of supported methods are accepted even if they modify the\nmodel *formula* (additional model fitting methods are likely to work, but have\nnot been tested); (3) unlimited quantiles supported; (4) user defined fit\nfunctions that return an object of a class derived from `rq` or `rqs` are\nsupported even if they override the \nstatistic's *formula* and/or *quantiles*\nargument; (5) two and three quantiles supported; (6) user defined fit functions\nthat return an object of a class derived from `lmodel2` are supported; (7)\n`method` arguments support colon based notation; (8) model fit functions if method\n`residuals()` defined for returned value; (9) model fit functions if method\n`fitted()` is defined for the returned value.\n\nStatistics `stat_peaks()` and `stat_valleys()` can be used to highlight and/or\nlabel global and/or local maxima and minima in a plot.\n\n## Aesthetics and scales\n\nScales `scale_x_logFC()`, `scale_y_logFC()`, `scale_colour_logFC()` and\n`scale_fill_logFC()` easy the plotting of log fold change data. Scales\n`scale_x_Pvalue()`, `scale_y_Pvalue()`, `scale_x_FDR()` and `scale_y_FDR()` are\nsuitable for plotting _p_-values and adjusted _p_-values or false discovery rate\n(FDR). Default arguments are suitable for volcano and quadrant plots as used for\ntranscriptomics, metabolomics and similar data.\n\nScales `scale_colour_outcome()`, `scale_fill_outcome()` and \n`scale_shape_outcome()` and functions `outome2factor()`, `threshold2factor()`,\n`xy_outcomes2factor()` and `xy_thresholds2factor()` used together make it \neasy to map ternary numeric outputs and logical binary outcomes to color,\nfill and shape aesthetics. Default arguments are suitable for volcano,\nquadrant and other plots as used for genomics, metabolomics and similar data.\n\n## Migrated\n\nSeveral geoms and other extensions formerly included in package 'ggpmisc' until version 0.3.9\nwere migrated to package 'ggpp'. They are still available when 'ggpmisc' is\nloaded, but the documentation now resides in the new package ['**ggpp**'](https://docs.r4photobiology.info/ggpp/). \n[![cran version](https://www.r-pkg.org/badges/version/ggpp)](https://cran.r-project.org/package=ggpp)\n[![ggpp status badge](https://aphalo.r-universe.dev/badges/ggpp)](https://aphalo.r-universe.dev/ggpp)\n\u003ca href=\"https://docs.r4photobiology.info/ggpp/\"\u003e\u003cimg src=\"https://img.shields.io/badge/documentation-ggpp-informational.svg\" alt=\"\" /\u003e\u003c/a\u003e\n\nFunctions for the manipulation of layers in ggplot objects, together with statistics and\ngeometries useful for debugging extensions to package 'ggplot2', included in\npackage 'ggpmisc' until version 0.2.17 are now in package ['**gginnards**'](https://docs.r4photobiology.info/gginnards/).\n[![cran version](https://www.r-pkg.org/badges/version/gginnards)](https://cran.r-project.org/package=gginnards) \n[![gginnards status badge](https://aphalo.r-universe.dev/badges/gginnards)](https://aphalo.r-universe.dev/gginnards)\n\u003ca href=\"https://docs.r4photobiology.info/gginnards/\"\u003e\u003cimg src=\"https://img.shields.io/badge/documentation-gginnards-informational.svg\" alt=\"\" /\u003e\u003c/a\u003e\n\n## Examples\n\n```{r readme-02, message=FALSE}\nlibrary(ggpmisc)\nlibrary(ggrepel)\nlibrary(broom)\n```\n\nIn the first two examples we plot data such that we map a factor to the _x_\naesthetic and label it with the adjusted _P_-values for multitle comparision\nusing \"Tukey\" contrasts.\n\n```{r readme-03a}\n#| fig.cap: \u003e\n#|   **Figure 1.** Boxplots with outcome from paiwise contrasts using\n#|   Tukey's HSD (honestly significant difference) as criterion with\n#|    $\\alpha = 0.05$.\n#|       \nggplot(mpg, aes(factor(cyl), cty)) +\n  geom_boxplot(width = 0.33) +\n  stat_multcomp(label.type = \"letters\") +\n  expand_limits(y = 0)\n```\n\nUsing \"Dunnet\" contrasts and \"bars\" to annotate individual contrasts with the adjusted _P_-value, here using Holm's method.\n\n```{r readme-03b}\n#| fig.cap: \u003e\n#|   **Figure 2.** Boxplots with outcome from paiwise \n#|   Dunnet contrasts using Holms' _P_-adjustment. The\n#|   adjusted _P_-values are shown for each pairwise contrast.\n#|   An ANOVA is first fitted and subsequently its output is\n#|   used for pairwise contrasts within the _stat_. Labels are\n#|   formatted automatically. \n#|       \nggplot(mpg, aes(factor(cyl), cty)) +\n  geom_boxplot(width = 0.33) +\n  stat_multcomp(contrasts = \"Dunnet\",\n                p.adjust.method = \"holm\",\n                size = 2.75) +\n  expand_limits(y = 0)\n```\n\nIn the third example we add the equation for a linear regression, the adjusted\ncoefficient of determination and _P_-value to a plot showing the observations\nplus the fitted curve, deviations and confidence band. We use `stat_poly_eq()`\ntogether with `use_label()` to assemble and map the desired annotations.\n\n```{r readme-04}\n#| fig.cap: \u003e\n#|   **Figure 3.** Scatter plot of obsevations with a second degree \n#|   polynomial **fitted by OLS**. Fitted model line with 95% confidence band is\n#|   shown. Deviations for each observation are highlighted as red segments.\n#|   Fitted model equation, $R^2$ and _P_-value are shown as annotations.\n#|   Model fitted within _stats_ with labels generated automatically.\n#|       \nformula \u003c- y ~ x + I(x^2)\nggplot(cars, aes(speed, dist)) +\n  geom_point() +\n  stat_fit_deviations(formula = formula, colour = \"red\") +\n  stat_poly_line(formula = formula) +\n  stat_poly_eq(use_label(c(\"eq\", \"adj.R2\", \"P\")), formula = formula)\n```\n\nThe same figure as in the third example but this time annotated with the\nANOVA table for the model fit. We use `stat_fit_tb()` which can be used to add\nANOVA or summary tables.\n\n```{r readme-05}\n#| fig.cap: \u003e\n#|   **Figure 4.** The same base plot as in Figure 3, but annotated\n#|   with an inset ANOVA table for the fitted model. \n#|   Model fitted within _stats_ with table generated automatically.\n#|   Some column and row headings replaced by user-provided\n#|   character strings, some of them parsed as plotmath expressions.\n#|       \nformula \u003c- y ~ x + I(x^2)\nggplot(cars, aes(speed, dist)) +\n  geom_point() +\n  stat_poly_line(method = \"lm\", formula = formula) +\n  stat_fit_tb(method = \"lm\",\n              method.args = list(formula = formula),\n              tb.type = \"fit.anova\",\n              tb.vars = c(Effect = \"term\",\n                          \"df\",\n                          \"M.S.\" = \"meansq\",\n                          \"italic(F)\" = \"statistic\",\n                          \"italic(P)\" = \"p.value\"),\n              tb.params = c(x = 1, \"x^2\" = 2),\n              label.y = \"top\", label.x = \"left\",\n              size = 3.5,\n              parse = TRUE)\n```\n\nThe same figure as in the third example but this time using quantile regression, median in this example.\n\n```{r readme-04b, warning=FALSE}\n#| fig.cap: \u003e\n#|   **Figure 5.** Same scatter plot of obsevations as in Figures 3 and 4, \n#|   but with a the second degree \n#|   polynomial **fitted by quantile regression**. Fitted model line with 95% \n#|   confidence band shown.\n#|   Fitted model equation shown, $\\rho$ and the number of observations\n#|   shown as annotations.\n#|   Model fitted within _stats_ with labels generated automatically.\n#|       \nformula \u003c- y ~ x + I(x^2)\nggplot(cars, aes(speed, dist)) +\n  geom_point() +\n  stat_quant_line(formula = formula, quantiles = 0.5) +\n  stat_quant_eq(use_label(\"eq\", \"rho\", \"n\"),\n                formula = formula, quantiles = 0.5)\n```\n\nBand highlighting the region between both quartile regressions and a line for the median regression.\n\n```{r readme-04c, warning=FALSE}\n#| fig.cap: \u003e\n#|   **Figure 6.** The same scatter plot of obsevations as in Figures 3 to\n#|   5 but with three second degree polynomials **fitted by quantile \n#|   regression**, for the median and the quartiles. \n#|   The line shows the model fit for the median line, and the band delimits\n#|   the quartiles.\n#|   The three fitted model equations are shown as annotations.\n#|   Model fitted within _stats_ with labels generated automatically.\n#|       \nformula \u003c- y ~ x + I(x^2)\nggplot(cars, aes(speed, dist)) +\n  geom_point() +\n  stat_quant_band(formula = formula) +\n  stat_quant_eq(formula = formula, quantiles = c(0.25, 0.5, 0.75))\n```\n\nA quadrant plot with counts and labels, using `geom_text_repel()` from package\n'ggrepel'.\n\n```{r}\n#| fig.cap: \u003e\n#|   **Figure 7.** A quadrant plot as used to compare gene expression\n#|   under two conditions or in two genotypes. A fraction, 2% in this case,\n#|   of all genes are labelled, with those in the least dense\n#|   regions of the scatter plot selected automatically. The manually set\n#|   bandwidth, `h = 3` in this case, has a large effect on which \n#|   observations are highlighted and labelled.\n#|       \nggplot(quadrant_example.df, aes(logFC.x, logFC.y)) +\n  geom_point(alpha = 0.3) +\n  geom_quadrant_lines() +\n  stat_quadrant_counts() +\n  stat_dens2d_filter(color = \"red\", \n                     keep.fraction = 0.02, h = 3) +\n  stat_dens2d_labels(aes(label = gene), \n                     keep.fraction = 0.02, h = 3,\n                     geom = \"text_repel\", \n                     size = 2, \n                     colour = \"red\") +\n  scale_x_logFC(name = \"Transcript abundance after A%unit\") +\n  scale_y_logFC(name = \"Transcript abundance after B%unit\",\n                expand = expansion(mult = 0.2))\n```\n\nA time series using the specialized version of\n`ggplot()` that converts the time series into a tibble and maps the `x`\nand `y` aesthetics automatically. We also highlight and label the peaks\nusing `stat_peaks()`.\n\n```{r readme-03}\n#| fig.cap: \u003e\n#|   **Figure 8.** Plot of the `lynx` time series. The time series was converted\n#|   on-the-fly into a data frame and _x_ and _y_ mappings set automatically.\n#|   Automation relies on `ggplot()` being a generic function exported by \n#|   package 'ggplot2' and the definition of method specializations in 'ggpp'.\n#|   Peaks are highlited and annotated with the year extracted and formatted\n#|   by the _stat_. \n#|       \nggplot(lynx, as.numeric = FALSE) + geom_line() +\n  stat_peaks(colour = \"red\") +\n  stat_peaks(geom = \"text\", colour = \"red\", angle = 66,\n             hjust = -0.1, x.label.fmt = \"%Y\") +\n  stat_peaks(geom = \"rug\", colour = \"red\", sides = \"b\") +\n  expand_limits(y = 8000)\n```\n\n## Installation\n\nInstallation of the most recent stable version from CRAN (sources, Mac and Win\nbinaries):\n\n```{r cran-instalaltion, eval=FALSE}\ninstall.packages(\"ggpmisc\")\n```\n\nInstallation of the current unstable version from R-Universe CRAN-like\nrepository (binaries for Mac, Win, Webassembly, and Linux, as well as sources\navailable):\n\n```{r, eval=FALSE}\ninstall.packages(\"ggpmisc\",\n                 repos = c(\"https://aphalo.r-universe.dev\",\n                           \"https://cloud.r-project.org\"))\n```\n\nInstallation of the current unstable version from GitHub (from sources):\n\n```{r bb-instalation, eval=FALSE}\n# install.packages(\"remotes\") # nolint: commented_code_linter.\nremotes::install_github(\"aphalo/ggpmisc\")\n```\n\n## Documentation \n\nHTML documentation for the package, including help pages and the _User Guide_,\nis available at [https://docs.r4photobiology.info/ggpmisc/](https://docs.r4photobiology.info/ggpmisc/).\n\nNews about updates are regularly posted at [https://www.r4photobiology.info/](https://www.r4photobiology.info/).\n\nChapter 7 in Aphalo (2020) and Chapter 9 in Aphalo (2024) explain basic concepts\nof the grammar of graphics as implemented in 'ggplot2' as well as extensions to\nthis grammar including several of those made available by packages 'ggpp' and\n'ggpmisc'. Information related to the book is available at\n[https://www.learnr-book.info/](https://www.learnr-book.info/).\n\n## Contributing\n\nPlease report bugs and request new features at [https://github.com/aphalo/ggpmisc/issues](https://github.com/aphalo/ggpmisc/issues). Pull requests are welcome at [https://github.com/aphalo/ggpmisc](https://github.com/aphalo/ggpmisc).\n\n## Citation\n\nIf you use this package to produce scientific or commercial publications, please cite according to:\n\n```{r}\ncitation(\"ggpmisc\")\n```\n\n## Acknowledgement\n\nBeing an extension to package 'ggplot2', some of the code in package 'ggpmisc' has been created by using as a template that from layer functions and scales in 'ggplot2'. The user interface of 'ggpmisc' aims at being as consistent as possible with 'ggplot2' and the layered grammar of graphics (Wickham 2010). New features added in 'ggplot2' are added when relevant to 'ggpmisc', such as support for `orientation` for flipping of layers. This package does consequently indirectly include significant contributions from several of the authors and maintainers of 'ggplot2', listed at (https://ggplot2.tidyverse.org/).\n\n## References\n\nAphalo, Pedro J. (2024) _Learn R: As a Language._ 2ed. The R Series. Boca Raton and London: Chapman and Hall/CRC Press. ISBN: 9781032516998. 466 pp. \n\nAphalo, Pedro J. (2020) _Learn R: As a Language._ 1ed. The R Series. Boca Raton and London: Chapman and Hall/CRC Press. ISBN: 9780367182533. 350 pp. \n\nWickham, Hadley. 2010. “A Layered Grammar of Graphics.” Journal of Computational and Graphical Statistics 19 (1): 3–28. https://doi.org/10.1198/jcgs.2009.07098.\n\n## License\n\n© 2016-2026 Pedro J. Aphalo (pedro.aphalo@helsinki.fi). Released under the GPL, version 2 or greater. This software carries no warranty of any kind.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faphalo%2Fggpmisc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faphalo%2Fggpmisc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faphalo%2Fggpmisc/lists"}