Lightweight Extension of the Base R Graphics System
- CRAN checks, method
Method
Checks and health
CRAN runs every current package through
R CMD checkon a set of machines and publishes a result for each one. The health shown on a package page comes from these results alone.- Problems
- Notes alone never count against a package, but a warning, an error or a failure on any platform is a problem. Open CRAN deadlines are a fact of their own, shown as a clock after the mark, so the mark always says what the checks found.
- Checks only
- Health reflects CRAN's check results and nothing else. Even a package with no tests, no coverage or no recent release can have every platform OK.
- Once a day
- Results are collected once a day from files CRAN publishes. Each platform is one machine set-up, named by its R version, operating system, architecture and compiler, such as r-devel-linux-x86_64-fedora-clang.
- Platforms counted
- The 13 in 3 of 13 is the number of platform rows CRAN published for that package on the day of collection. The set of machines changes over time, so the number is not fixed, and a package missing from a platform counts as neither passing nor failing there.
- All OK13 platforms
- CRAN 30-day downloads, method
- 11,719+48.8% up on the 30 days before, the better direction
- Dependent packages, method
Method
Reverse dependencies
Dependent packages are other packages that list this one under
Depends,ImportsorLinkingToin theirDESCRIPTIONfile. Those fields list the packages a package needs to install, so dependents break if this one is archived or broken.- As declared
- The counts follow the declarations as written, not whether a package uses the other one when it runs.
- Suggests apart
- Packages that list this one only under
Suggestsinstall and run without it, and use it for tests, examples or an optional feature. They are counted as Suggested by, never among the dependents, and a package that also lists it under one of the three fields is a dependent and is not counted again. - Zero
- Zero dependents means no current CRAN package declares a need for this one, though some may suggest it. On 28 Oct 2026, 19,572 of the 25,583 current CRAN packages had no dependent package.
- 119 more suggest it
- Test coverage, method
Method
Test coverage
Test coverage is measured by downloading each CRAN package's current source file, installing its dependencies, building it and running its tests under covr.
- Almost half of CRAN has no tests to run
- Only CRAN packages are measured. Many have no percentage, most often because the package has no tests, and that blank is a recorded outcome, not missing data.
- NOT_CRAN
- Tests run with NOT_CRAN=true, so tests that skip themselves on CRAN run here, and the figure can differ from what CRAN's own checks see.
- Current version only
- Only the current version is measured, and a new version on CRAN is measured again. Older rows are kept but never filled in later. This is one package's run.
- Never 0%
- On a package page three states stay apart: measured, no tests, and not measured. Neither of the last two is ever shown as 0%.
- Not measuredthe run failed
- Advisories, method
Method
Security advisories
Advisories come from the R Consortium advisory database, a community record of security problems in R packages, as OSV publishes it.
- The copy
- The record is read once a day. The data is published under the Apache License 2.0 and is credited on the advisories list.
- Box under the name
- Under the package's name, a box names any advisory that affects the current release, with its fix or that there is none.
- Ranges
- Advisories state ranges, such as from 0.9.12 up to but not including 1.8.8. Each range is checked against every version CRAN has published, using the version rules R itself uses, so a release that came out after the advisory was written is still caught by its range.
- Not the package
- The rating is for the library flaw itself, not for how exposed the R package is, and it is never added up into a figure for the package.
- None known
About
Method, About Method Licence figures come from the Licences
License field of each package's DESCRIPTION file, read the way R itself reads it. No licence file is opened.tools::analyze_license() and R's own licence database, as CRAN's checks read it.| is read, so one string can offer two families.
Lightweight extension of the base R graphics system, with support for automatic legends, facets, themes, and various other enhancements.
- Maintainer
- Grant McDermott
- Licence
- Apache License (>= 2)
- Latest release
- 28 Sep 2026
- First release
- 20 Jun 2024
More details
- Releases
- 12
- Needs compilation
- No
- Needs R
- >= 4.0.0
- Config/Needs/website
- altdoc (>= 0.7.2), future.apply
- Config/roxygen2/version
- 8.1.0
- Date
- 2026-09-27
Subjects (1) Method, SubjectsMethod
Subjects and collections
Subjects are the site's own grouping of CRAN packages, found by clustering. Collections are sets of packages that communities declare, such as the tidyverse.
- Subjects
- Subjects are found by clustering the words of current CRAN packages and the packages they use. No one edits them by hand.
- Collections
- Collections are sets that communities declare, through a package that installs the set or an organization on GitHub. The site finds them by rules.
- Who made each
- Subjects are marked Site and collections Community. Subjects, collections and task views are never mixed in one list.
- The day of the data
- Subjects and collections were last worked out on 22 Oct 2026.
Cite
Package
Run in R for the authors' preferred citation:
citation("tinyplot")The package provides a citation file that builds its entry when R runs it. Run citation() to see it.
R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
Balamuta, J. J. (2026). R Observatory: Metrics for tinyplot version 0.8.0 [Data set]. HJJB, LLC. Data release v2026-10-28. https://doi.org/10.5281/zenodo.21843040
About
From data release v2026-10-28, which the citation names so these numbers can be found later.
Health
All 13 check platforms pass.
r-devel-linux-x86_64-debian-clangThe unreleased R on Linux, x86_64, debian-clang
OK
- Version checked
- 0.8.0
- Time taken
- 108 s
r-devel-linux-x86_64-debian-gccThe unreleased R on Linux, x86_64, debian-gcc
OK
- Version checked
- 0.8.0
- Time taken
- 78 s
r-devel-linux-x86_64-fedora-clangThe unreleased R on Linux, x86_64, fedora-clang
OK
- Version checked
- 0.8.0
- Time taken
- 70 s
r-devel-linux-x86_64-fedora-gccThe unreleased R on Linux, x86_64, fedora-gcc
OK
- Version checked
- 0.8.0
- Time taken
- 63 s
r-devel-windows-x86_64The unreleased R on Windows, x86_64
OK
- Version checked
- 0.8.0
- Time taken
- 139 s
r-oldrel-macos-arm64The previous release of R on macOS, arm64
OK
- Version checked
- 0.8.0
- Time taken
- 45 s
r-oldrel-macos-x86_64The previous release of R on macOS, x86_64
OK
- Version checked
- 0.8.0
- Time taken
- 142 s
r-oldrel-windows-x86_64The previous release of R on Windows, x86_64
OK
- Version checked
- 0.8.0
- Time taken
- 158 s
r-patched-linux-x86_64The patched release of R on Linux, x86_64
OK
- Version checked
- 0.8.0
- Time taken
- 104 s
r-release-linux-x86_64The current release of R on Linux, x86_64
OK
- Version checked
- 0.8.0
- Time taken
- 104 s
r-release-macos-arm64The current release of R on macOS, arm64
OK
- Version checked
- 0.8.0
- Time taken
- 29 s
r-release-macos-x86_64The current release of R on macOS, x86_64
OK
- Version checked
- 0.8.0
- Time taken
- 158 s
r-release-windows-x86_64The current release of R on Windows, x86_64
OK
- Version checked
- 0.8.0
- Time taken
- 135 s
- 13 OK
Over time
No change since 4 Aug 2026
As a list (5)
| Changed | Worst status | OK | Notes | Warnings | Errors |
|---|---|---|---|---|---|
| 4 Aug 2026 | OK | 13 | 0 | 0 | 0 |
| 1 Aug 2026 | Note | 12 | 1 | 0 | 0 |
| 9 Jun 2026 | OK | 13 | 0 | 0 | 0 |
| 8 Jun 2026 | Warning | 12 | 0 | 1 | 0 |
| 10 Mar 2026 | OK | 14 | 0 | 0 | 0 |
Since March 2026
Downloads
Method, Downloads Method Download figures count requests logged by each distribution channel. They are not counts of installs or of users, because each channel publishes its own totals and this site reads them.Downloads
- Total downloads in the last 30 days
- 12,289+48.7% up on the 30 days before, the better directionIt is the sum of 4 channels: CRAN, r2u, autoCRAN and conda-forge.
CRAN rank
1,066 of 26,530
CRAN
11,719 downloads in the last 30 days
- Rank
- 1,066 of 26,530
- Change
- +48.8% up on the 30 days before, the better direction
It is in the total. Take it out
r2u
276 downloads in the last 30 days
- Rank
- 1,476 of 30,526
- Change
- +40.8% up on the 30 days before, the better direction
It is in the total. Take it out
autoCRAN
1 downloads in the last 30 days
- Rank
- 25,688 of 29,212
- Change
- −92.9% down on the 30 days before, the worse direction
It is in the total. Take it out
conda-forge
293 downloads in the last 30 days
- Rank
- 2,038 of 3,828
- Change
- +66.5% up on the 30 days before, the better direction
It is in the total. Take it out
The total is 12,289 downloads in the last 30 days. It is the sum of 4 channels: CRAN, r2u, autoCRAN and conda-forge.
Over time
Dependencies
- Needs
- 5
- Dependent packages
- 11
- Suggested by
- 9
Needs (5)
- graphics
- grDevices
- stats
- tools
- utils
- Installing it adds
- 0 packages, 0 KB of source
- Of those, need compilation
- 0
Optional extras (7)
Dependent packages (11)
| Package | Title | Downloads in 30 days |
|---|---|---|
| pdp | Partial Dependence Plots | 6,629 |
| etwfe | Extended Two-Way Fixed Effects | 877 |
| PP | Person Parameter Estimation | 731 |
| joinery | Heuristic Index-Based Record Linkage | 319 |
| fwlplot | Scatter Plot After Residualizing Using 'fixest' Package | 317 |
| parttree | Visualize Simple 2-D Decision Tree Partitions | 311 |
| forrest | Publication-Ready Forest Plots | 294 |
| multiSA | Multi-Stock Assessment | 283 |
| tradepolicy | Replication of 'An Advanced Guide To Trade Policy Analysis' | 278 |
| collett | Datasets from "Modelling Survival Data in Medical Research" by Collett | 262 |
| partialling.out | Residuals from Partial Regressions | 194 |
Code
Method, Code Method Code metrics come from reading the released source of each package version. The package is never installed, loaded or run.Code metrics
README, vignettes, a NEWS file and the shares read from its help pages. Files kept only in the repository, such as a pkgdown configuration or CI files, are read by the repository scan instead.
- Functions
- 283
- Public exports
- 51
- Lines of R code
- 19,106
- Median complexity
- 4
Functions (283)
Size and composition
Lines by kind (25,715)
| Kind | Lines | Share |
|---|---|---|
| R code | 19,106 | 74% |
| Tests | 14 | 0.1% |
| Documentation | 6,595 | 26% |
Lines by language
| Language | Lines | Share |
|---|---|---|
| R | 19,120 | 74% |
| Rd | 6,595 | 26% |
Languages are counted from file extensions.
- Files
- 152
- R functions
- 283
- Object systems
- S3: 9 methods
Complexity
- Median
- 4
- Mean
- 9.42
- Highest
- 200
- Median lines per function
- 17
About complexity
Cyclomatic complexity counts the independent paths through a function: 1 is a straight line, higher is harder to test. R functions only.
Call graph figures
- R functions
- 283
- Calls
- 478
- Unconnected
- 9
- Groups
- 7
Growth (12 releases)
Release changes
Tests
The tests stopped with an error, so coverage was not obtained.
- Lines of tests
- 14
- Exports named in tests
- 2%
Test suite
- Has tests
- Yes
- Test frameworks
- tinytest
- Test lines per line of code
- 0
Documentation
- Exports documented
- 100%
- Arguments documented
- 84.4%
- Return value documented
- 25%
- Help pages with examples
- 75.4%
- Examples run in checks
- 93.5%
Other documentation
- README
- Yes, 625 words
- Release notes file
- Yes
- Help pages
- 61
- Lines of documentation
- 6,595
People
Method, People Method People on the site are the names packages give them in their Author and maintainer identity
DESCRIPTION files: authors from the author list, and the maintainer from the Maintainer field. Spellings of one name become one person only where the rules below allow it, and when in doubt the rules keep people apart.
Repository
Method, figures by host Method Repository signals are the figures read from the source repository a package links to: stars, forks, issues, commits, releases and the time issues take to close. They are read from GitHub, GitLab, Codeberg and Bitbucket.Repository signals
URL and BugReports fields of its DESCRIPTION file. Read-only mirrors, the cran and bioc accounts on GitHub and git.bioconductor.org, are left out.
grantmcdermott / tinyplot on github.com
- Stars
- 429no change on 30 days ago
- Forks
- 25
- Open issues
- 20
- Last commit
- 28 Sep 2026
Activity
- Commits
- 734
- Open pull requests
- 0
- Tagged releases
- 17
- Latest tagged release
- v0.8.0, 28 Sep 2026
- Issues closed in
- 6 days (median)
- Pull requests closed in
- 0 days (median)
- Pull requests merged
- 93%
- Created
- 21 Feb 2023
- Licence file reads as
- Apache-2.0
Development practices (10)
| Kind | Found |
|---|---|
| Continuous integration | GitHub Actions, R CMD check workflow The R CMD check workflow runs on Linux |
| Docs source | README.qmd, altdoc GitHub Pages site last deployed 2026-09-28 The repository has a site deploy workflow pkgdown site last built 2026-09-28 |
| Reproducibility and dev environment | Makefile, Dev Container |
| CRAN release process | cran-comments.md, CRAN-SUBMISSION |
Method, repository practices Method Beta Each week a scan of the public source repository a package links to looks for the tools a maintainer has set up, and the Repository section lists the findings. Repositories on GitHub and GitLab are scanned.Repository practices
R CMD build reads .Rbuildignore and leaves out files used only in development, such as .github/, .lintr, renv/, a Dockerfile and cran-comments.md, so the released source file holds almost none of them. The repository is the one place these files stay visible.
AI tools
Method, AI tools Method Beta What is found in a repository is not a measure of the code.AI tool findings
Tools
| Tool | First seen | Found | Commits crediting it |
|---|---|---|---|
| Claude Code | 14 May 2026 | Seen in the repositoryCLAUDE.mdNamed in .Rbuildignore.claudeCLAUDE.mdNamed in .gitignore.claudePull request it wrote: opened by a project member | 5 at least |
- Seen in the repository
- Named in .Rbuildignore
- Named in .gitignore
- Pull request
Models
| Model | Commits | First commit | Last commit | Credit lines of |
|---|---|---|---|---|
| Claude Opus 4.8 | 1 | 15 Aug 2026 | 15 Aug 2026 | Claude Code |
History
Method, History Method Archived is built from CRAN's archive records, its list of check deadlines and Bioconductor's package records. Every figure is counted to 28 Oct 2026, the day the data was read.Packages leaving
| Version | Released | R |
|---|---|---|
| 0.8.0 current | 28 Sep 2026 | 4.6.1 |
| 0.7.0 | 3 Jul 2026 | 4.6.1 |
| 0.6.1 | 28 Mar 2026 | 4.5.3 |
| 0.6.0 | 27 Nov 2025 | 4.5.2 |
| 0.5.0 | 22 Sep 2025 | 4.5.1 |
| 0.4.2 | 12 Jul 2025 | 4.5.1 |
| 0.4.1 | 3 Jun 2025 | 4.5.0 |
| 0.4.0 | 23 May 2025 | 4.5.0 |
Earlier versions (4)
Release notes (0.8.0)
Breaking changes
type_lines()and its shortcut equivalents like"l"and"b"now order categoricalxdata by (coerced) factor levels, rather than simple order of appearance. This resolves a longstanding tension between line types and other types liketype_points(), which have always ordered thexaxis by implied factor levels. It also improves layering consistency viaplt_add()and co. so that plots are identical, regardless of whether lines are layered on top of points, or vice versa. Note that you can still select into the old behaviour by passing the (new)xord = "asis"argument as an explicit override; see "Other new features" below. (#683 @grantmcdermott)
New features
New plot types
type_hexbin()/"hexbin"for hexagonal bin plots, a 2D analogue of a histogram. (#667 @grantmcdermott)type_tile()/"tile"for tile plots, i.e. a grid of rectangles whose fill encodes a third variable. (#677 @grantmcdermott)type_heatmap()/"heatmap"builds ontype_tile(), adding ascaleargument that scales the fill values _within_ each category of one axis. This is analogous to base R'sheatmap()function, and like the latter it z-scores along the chosen margin by default. It also reverses the y-axis by default, so that the first row sits at the top (again matchingheatmap()); pass an explicitylimto override. (#677 @grantmcdermott)type_sina()/"sina"for sina plots, a variant of the violin plot where the raw observations are displayed as points, with each group's width bounded by its density. This makes them arguably a more principled version of the beeswarm plot. (#734 @grantmcdermott)- While not strictly a new plot type,
type_area()gains a newstackargument for drawing _stacked_ area plots, where each layer represents a discretebycategory group. This functionality is further enhanced by two (also new) sister arguments. First,byordenables on-the-fly (re-)ordering of the stackedbylayers, via convenience keywords or custom functions (e.g.,byord = "end"ranks groups according to their largest final value). Second, afunargument permits stacking of multi-observation data by collapsing repeatedyvalues. (#688 @grantmcdermott)
Facet improvements
The top-level facet.args list argument gains several new (sub-)arguments that
enable finer control and customization of faceted plots:
axes: gives explicit control over which facets draw their own axes:"all","outer"(drop redundant interior axes), or"none". Previously this was only achievable as a side effect offrame.plot = FALSE, soaxes = "outer"now allows redundant axes to be dropped while _keeping_ the facet frames. Left unspecified, the behaviour is still inferred from whether the plot is framed. (#661, #673 @grantmcdermott)- Themes with L-shaped axes (
"classic","socviz","tufte", and"float") now default tofacet.axes = "outer", so that they drop the redundant interior axes of faceted plots. drop: allows for the removal of empty facets. The behaviour varies slightly depending on whether a one-sided (wrapped) or two-sided (gridded) facet formula is specified. The former simply removes the missing factor level, while the latter retains its spot (to preserve the rectangular grid) but is not drawn. (#708, #710 @grantmcdermott)drop.levels: allows each free facet (free = TRUE) to keep only the categories of a categorical axis that it actually uses. The panel's axis is recomputed as if its own data had been passed throughfactor(), so that the surviving categories are re-spaced evenly rather than leaving a gap where an unused one sat. Note the distinction fromdropabove: the latter removes empty _facets_, whereasdrop.levelsremoves unused _categories within_ a facet. Default isFALSE, i.e. every facet keeps the full set of categories. (#718 @grantmcdermott)labeller: for formatting facet titles viatinylabel(). Accepts the usual mix of convenience keywords (symbols) known totinylabel(), or formatting functions. A (named) vector or list can be used to separately format multi-variable facets, e.g.labeller = c(country = toupper, size = ","). (#684 @grantmcdermott)prefix: for adding an informative prefix to facet titles. In its simplest form,prefix = TRUEprepends the facet variable name, e.g."vs = 0"and"vs = 1"(rather than just"0"and"1"). Likelabellerabove, multi-variable facets can be prefixed separately via a (named) vector or list, e.g.prefix = c(am = "Automatic", vs = "V-shaped"). (#684 @grantmcdermott)sep: controls how the individual variables of a multi-variable facet title are separated, e.g. usesep = "\n"to stack on separate lines rather than concatenating via the default":". (#684 @grantmcdermott)
Note that each of these facet.args arguments is paired with an equivalent
tpar(facet.<arg>) parameter. For example, call tpar(facet.axes = "outer")
to set this behaviour globally. This also means that they can be set as part of
a (custom) theme, e.g. tinytheme("clean", facet.axes = "outer").
Ordering and labelling categorical variables
This release brings several enhancements for working with _categorical_
variables, i.e. where x, y, or by are characters or factors with discrete
levels. This includes improvements to existing arguments, as well as the
provision of some new arguments that enable finer control over level ordering
and convenient label formatting.
xlevels,ylevels: these (type-level) arguments permit on-the-fly reordering of a categorical variable via _literal_ specification, either a character vector of level names (e.g.,c("C", "B", "A")), or a numeric vector of level indices (e.g.,3:1). While this argument is not new---having been supported bytype_barplotand several other types for a while---we now extendxlevelssupport totype_points(),type_lines(),type_errorbar(), andtype_pointrange(). (#683, #694 @grantmcdermott)xord,yord: these are new (type-level) arguments that provide an alternate ordering interface tox/ylevels. Specifically, whilex/ylevelsrequire a literal ordering,x/yord_computes_ the order on the fly, according to (type-appropriate) convenience keywords or a custom ranking function. For example,"desc(ending)"/"asc(ending)"orders by value, while"asis"ignores factor levels and just takes the order of appearance in the data as given. Among other things, this makes it possible to sort barplots by height (e.g.,type_barplot(xord = "desc")), or ridges by their spread (e.g.,type_ridge(yord = "minvar")) without relevelling the underlying factor by hand. (#683, #694 @grantmcdermott)- (Note: users should only supply one of the preceding sets of arguments. If both
x/ylevelsandx/yordare provided, the former takes precedence as the more explicit.) tinylabel()gains a dictionary form, i.e., a *named* character vector or list that maps existing labels to new ones _a la_c(old1 = "new1", old2 = "new2"). Partial mapping is fine since the lookup is by value rather than by position, so that some levels can be left unnamed. Importantly, this behaviour extends to the rest of tinyplot's (re)labelling machinery---includingx/yaxl,type_text(), and any function with alabellerargument---since everything is routed throughtinylabel(). (#690 @grantmcdermott)- The type-level
x/yaxlabelsarguments oftype_spineplot()andtype_barplot()are deprecated in favour of the top-levelx/yaxlarguments. The type-level arguments predated their top-level cousins, which now offer the same functionality via a consistent interface across _all_ types. The old arguments still work (with a warning) for now. But we will be formally removing them in a future release and, going forwards, encourage users to move over toxaxlandyaxlas the idiomatic tinyplot way to relabel and format axis ticks. (#692 @grantmcdermott)
Beyond convenience, these improvements to categorical variable handling also
provide the scaffolding to eliminate some niggling inconsistencies; for example,
related to plot layering. See "Bug fixes" below.
Axis aesthetics
- Point-like glyphs (
"p","l","errorbar", and friends) gain smart padding behaviour for categorical axes. Most notably, we now use more generous axis padding when there are few unique categories (levels), so that the end tick marks aren't drawn flush against the plot frame. Users can also override with the newx/ypadarguments (see below) to match their own aesthetic preferences. (#732 @grantmcdermott)
New tinyplot.* methods
tinyplot.array(): for (unclassed)arrayobjects with up to four dimensions. This extends thetinyplot.matrix()conventions by mapping the third dimension to facets, and a fourth to a facet grid. The names of the dimnames (if any) are used for the axis, legend, and facet titles. Arrays with a length-2 dimension (e.g.,gait) are plotted as x/y pairs, i.e. one slice against the other. See thetinyplot.array-specificxyargument. Passingfacet = FALSEdraws everything in a single panel instead. (#746 @grantmcdermott)
Other new features
- New top-level
tinyplot()/plt()arguments: xpadandypadenable control over how much padding (as a fraction of the data range) is added to each end of the axes. Following base R conventions, the default for most plots is0.04, i.e. 4% padding on each side. Also settable globally viatpar(xpad = <xpad>, ypad = <ypad>). (#729 @grantmcdermott)xaxrandyaxrenable rotating of the x- and y-axis tick labels by arbitrary angles, closing a long-standing feature request (#346). Note that setting one overrideslasfor that axis. Best combined with a dynamic theme, since the plot margins are resized to fit the rotated labels. Also settable globally viatpar(xaxr = <xaxr>, yaxr = <yaxr>)and thus as part of atinythemetoo. (#717 @grantmcdermott)lasdoes the same thing, but limited to the four right angles of base R'spar(las=)convention, having previously been settable only viatpar()or a theme. Note that this top-level argument applies to a single plot only and takes precedence over the active theme, so it can also be used to opt _out_ of a theme'slas, e.g.tinyplot(..., theme = "clean", las = 0). (#353 @grantmcdermott)- (Experimental)
recordenables recording plots as replayable objects, closing another long-standing feature request (#121). Specifically, settingrecord = TRUEreturns a"recordedtinyplot"object (see?recordedtinyplot), allowing for assignment and later recall, e.g.myplot = tinyplot(...); myplot. Also settable globally viatpar(record = TRUE), so that alltinyplot()plots are automatically recorded---with potential memory implications for detailed plots with _many_ elements. Note that a recorded plot will still render its display on the initialising call if you are using an interactive graphics device. While we have done our best to vet this newrecordfunctionality carefully, users should still regard it as experimental. We may change its behaviour (availability) in a future release if we observe undesirable side-effects. Please help us by testing on your own machines and reporting any issues. (#686 @grantmcdermott) - Type-specific updates:
type_lines()and its shortcut equivalents like"l"and"s"now support a _continuous_byvariable, drawing a colour gradient along the line itself rather than reverting to a discrete legend. Useful for trajectories, where a third variable (typically time) orders the path; see the new?type_linesexamples. (#712 @grantmcdermott)type_density()gains anecho.bwargument for reporting the smoothing bandwidth and the number of observations behind it, neither of which is visible from the curve itself. Destinations are"sub","cap", and"cat"(console), in any combination; a destination the user has already labelled is left alone. Shared bandwidths are reported once and named as joint, individual bandwidths per group. (#287 @haomeng797-ship-it)type_area()gains astackargument for drawing stacked area plots. See "New plot types" above for more details. (#688 @grantmcdermott)type_summary()gains adodge(andfixed.dodge) argument, thus enabling dodging of grouped plots. This is mostly useful for adding summaries on top of a base layer that is itself dodged. Separately,type_summary()'s internals have been refactored to usestats::aggregateinstead ofstats::ave. (#701 @grantmcdermott)type_barplot()gains ana.as.zeroargument for controlling whether a category that no observation reaches is treated as a zero (and so marked with a flat bar along the baseline) or left undrawn. The defaultNULLletsfundecide; see the new "Implicit zeros and empty cells" section of?type_barplot. (#718 @grantmcdermott)type_barplot()'s aggregation argument is now spelledfun, for consistency with the other types that take a function and with tinyplot's lowercase argument naming generally.FUNis retained as a backwards-compatible alias, so existing code keeps working; supply one or the other, andfuntakes precedence if both are given. (#695 @grantmcdermott)type_histogram()now (correctly) supports mappingbygrouping along thexvariable, e.g.tinyplot(~mpg | mpg, data = mtcars, type = "hist"). Bar colours map to mean bin values. (#727 @grantmcdermott)type_loess()is now much faster on large data. Thanks to @eleuven for bringing this slowness issue to our attention. (#509 @grantmcdermott)- Themes:
"heatmap"provides a dedicated companion theme to the newtype_tile()andtype_heatmap()types (see above). The theme removes all axis padding, so that tiles meet the panel edge, and also rotates the tick labels against their respective axes. Colour fills default to the "tealgrn" sequential palette. (#677 @grantmcdermott)- New
tinytheme_get()function returns the name of the currently active theme. (#629 @grantmcdermott) - Custom plot types have more control over the surrounding plot machinery, via a new
type_hintsmechanism. A type can declare properties about itself---that it draws its own axes, needs a secondary right-hand axis, uses proportional limits, fills its legend key fromcol, and so on---and tinyplot adjusts margins, axis limits and legend keys accordingly. Previously this behaviour was hard-coded against the names of built-in types, so it was unavailable to custom types. See Advanced customization in theTypesvignette for the list of supported hints. (#543 @grantmcdermott)
The notes are cut short here.