If you are viewing this file on CRAN, please check the latest NEWS on our website where the formatting is also better.
0.4.2 New featurestype_text()
gains xpd
and srt
arguments for controlling text clipping rotation, respectively. (#428 18)xlevels
(in addition to ylevels
) in type_spineplot()
for spine plots with categorical x
variable. (#431 @zeileis)plt_add()
âto become misaligned in faceted plots (#313). This also resolves related alignment issues when adding layers specifically within the Positron IDE (positron#7316). tinyplot should now be fully compatible with Positron. (#438 18)"p"
-alike plot types (including "jitter"
) if y
is a factor or character.tinyplot
behaves inside loops, particularly for themed plots where only the final plot was being drawn in Quarto/RMarkdown contexts. Special thanks to @hadley and @cderv for helping us to debug. (#425 9)xlevels
argument of type_barplot()
could not handle numeric indexes correctly. (#431 @zeileis)type_hline
, type_vline
, type_abline
) addresses several shortcomings. For example, these types now work correctly across non-by
facets. Simultaneously, users can also call them in a base plot layer, relaxing the requirement that they must be called as part of a subsequent plot layer via tinyplot_add()
. (#422 18)tinytheme("ridge")
regression that was accidentally introduced in v0.4.0, which was causing a palette mismatch for gradient legends. (#415 18)"barplot"
/ type_barplot()
for bar plots. This closes out one of the last remaining canonical base plot types that we wanted to provide a native tinyplot
equivalent for. (#305 and #360 @zeileis and 18)"violin"
/ type_violin()
for violin plots. (#354 18)tinyplot(..., file = "*.pdf")
will now default to using cairo_pdf()
if cairo graphics are supported on the userâs machine. This should help to ensure better fidelity of (non-standard) fonts in PDFs. (#311 18)
The palette
argument now accepts a vector or list of manual colours, e.g. tinyplot(..., palette = c("cyan4", "hotpink, "purple4"))
, or tinytheme("clean", palette = c("cyan4", "hotpink, "purple4"))
(#325 18)
Two new sets of top-level arguments allow for greater axis customization:
xaxb
/yaxb
control the manual break points of the axis tick marks. (#400 18)xaxl
/yaxl
apply a formatting function to change the appearance of the axis tick labels. (#363, #391 18)These x/yaxb
and x/yaxl
arguments can be used in complementary fashion; see the new (lower-level) tinylabel
function documentation. For example:
tinyplot((0:10)/10, yaxb = c(.17, .33, .5, .67, .83), yaxl = "%")
The x/ymin
and x/ymax
arguments can now be specified directly via the tinyplot.formula()
method thanks to better NSE processing. For example, instead of having to write
with(dat, tinyplot(x = x, y = y, by = by ymin = lwr, ymax = upr))
users can now do
tinyplot(y ~ x | by, dat, ymin = lwr, ymax = upr)
Underneath the hood, this works by processing these NSE arguments as part of formula model.frame()
and reference against the provided dataset. We plan to extend the same logic to other top-level formula arguments such as weights
and subset
in a future version of tinyplot.
tinyplot(..., cex = <cex>)
argument should be respected when using type = "b"
. Thanks to @rjknell for report #307 and 9 for the fix.tinyplot(..., lwd = <lwd>)
argument is now correctly passed down to pt.lwd
for type "p"
, which sets proper line weight for the border of pch
symbols in legend. Report in #319 and fix in #320 by @kscott-1.x
and/or y
as character variables now triggers the same default plot type behaviour as factors, e.g. boxplots. (#323 18)type_points()
/"p"
) now work even if x
or y
is a factor or character variable. (#323 18)tinyplot(..., col = <col>)
argument now accepts a numeric index. (#330 18)type_text()
now accepts non-character labels. (#336 18)tinyplot(..., pch = <pch>)
argument now accepts character literals, e.g. pch = "."
. (#338 18)type_lines()
/"l"
) now pass on the bg
argument to the drawing function. Thanks to @wviechtb for report in #355 (@zeileis)."boxplot"
and "jitter"
types. Thanks to @eddelbuettel for the report in #357 (18).las = 2
or las = 3
. (#369 18)plt_add()
on a faceted plot, but this appears to be an upstream limitation/bug positron#7316."p"
-alike plot types (including "jitter"
) if y
is a factor or character. (#387 18)palette
and col
arguments, particularly with respect to recycling behaviour. Thanks to @eddelbuettel for the report (#352) and 18 for the fix (#410).altdoc
fix)tinyplot v0.3.0 is a big release with many new features, both internal and user-facing. Related updates are grouped below for easier navigation.
Revampedtype
logic and functional equivalents
(Primary PR and author: #222 9)
In addition to the standard character labels ("p"
, "density"
, etc.), the type
argument now supports functional equivalents (type_points()
, type_density()
, etc.). These new functional types all take the form type_*()
.
The character and functional types are interchangeable. For example,
tinyplot(Nile, type = "hist")
and
tinyplot(Nile, type = type_hist())
produce exactly the same result.
The main advantage of the functional type_*()
variants is that they offer much more flexibility and control beyond the default case(s). Users can pass appropriate arguments to existing types for customization and can even define their own type_<typename>()
functions. More information is available in the dedicated help page for each type (e.g., ?type_hist
, ?type_lm
, etc.)
On the development side, overhauling the type
system has also allowed us to introduce a number of new plot types and features (see list below). We have also simplified our internal codebase, since explicit argument passing requires less guesswork on our end. Speaking of which, we now recommended that users explicitly pass ancillary type-specific arguments as part of the relevant type_*()
call. For example,
tinyplot(Nile, type = type_hist(breaks = 30))
is preferable to
tinyplot(Nile, type = "hist", breaks = 30)
While the latter option will still work, we cannot guarantee that argument passing will work in every situation. (Reason: Passing ancillary type-specific arguments at the top level of the plot call only works if these do not conflict with the main arguments of the tinyplot()
function itself; see #267.)
Some minor breaking changes were unavoidable; see further below.
For more details on the new type
system, please see the dedicated Plot types vignette on the website.
Visualizations:
type_spineplot()
(shortcut: "spineplot"
) spine plots and spinograms. These are modified versions of a histogram or mosaic plot, and are particularly useful for visualizing factor variables. (#233 @zeileis with contributions from 18)type_qq()
(shortcut: âqqâ) for quantile-quantile plots. (#251type_ridge()
(shortcut: "ridge"
) for ridge plots aka Joy plots. (#252 9, @zeileis, and 18)type_rug()
(shortcut: "rug"
) adds a rug to an existing plot. (#276type_text()
(shortcut: "text"
) adds text annotations. (9)Models:
type_glm()
(shortcut: "glm"
) (9)type_lm()
(shortcut: "lm"
) (9)type_loess()
(shortcut: "loess"
) (9)type_spline()
(shortcut: "spline"
) (#241 18)Functions:
type_abline()
: line(s) with intercept and slope (#249 9)type_hline()
: horizontal line(s) (#249 9)type_vline()
: vertical line(s) (#249 9)type_function()
: arbitrary function. (#250 9)type_summary()
: summarize values of y
along unique values of x
(#274(Primary PR and authors: #258 9 and 18)
tinytheme()
function provides a convenient mechanism for styling plots according to a variety of pre-defined themes, e.g. tinytheme("clean")
.tinytheme()
(with no argument) to restore the default plot aesthetic.tinytheme()
sets a hook for a group graphical parameters by passing them through tpar()
. Users can still use tpar()
to style their plots manually by setting individual graphical parameters. But going forward we expect that most tinyplot users will prefer the convenience of going through tinytheme()
.New tinyplot()
arguments:
flip <logical>
allows for easily flipping (swapping) the orientation of the x and y axes. This should work regardless of plot type, e.g. tinyplot(~Sepal.Length | Species, data = iris, type = "density", flip = TRUE)
. (#216 18)draw = <draw_funcs>
allows users to pass arbitrary drawing functions that are evaluated as-is, before the main plotting elements. A core use case is drawing common annotations across every facet of a faceted plot, e.g. text or threshold lines. (#245 18)facet.args
gains a free = <logical>
sub-argument for independently scaling the axes limits of individual facets. (#253 18)tpar()
gains additional grid.col
, grid.lty
, and grid.lwd
arguments for fine-grained control over the appearance of the default panel grid when tinyplot(..., grid = TRUE)
is called. (#237 18)
The new tinyplot_add()
(alias: plt_add()
) convenience function allows easy layering of plots without having to specify repeat arguments. (#246
type_density(joint.bw = <option>)
argument. See the function documentation for details. (#291 18 and @zeileis)tinyplot.density()
method). Instead, please rather call tinyplot(..., type = "density")
or tinyplot(..., type = type_density())
on the raw data and pass grouping or facet arguments as needed. (#284 18)ribbon.alpha
argument in tinyplot()
has been deprecated. Use the alpha
argument in type_ribbon()
(and equivalents) instead: e.g., tinyplot(..., type = type_ribbon(alpha = 0.5))
.
tinyplot(..., type = "ribbon", alpha = 0.5)
because the latter matches the top-level alpha
argument of tinyplot()
itself (and thus modifies the entire palette
, rather than just the ribbon). See our warning about passing ancillary type-specific arguments above.plt(numeric ~ character)
now work correctly, with the character variable automatically being coerced to a factor. (#219 @zeileis)xlim
and ylim
when explicitly supplied by the user. (Thanks to @mclements for code submission #221)ymin
or ymax
args, now inherit these values from y
(#224 18)y
is a factor now work automatically, dispatching to the new type_spineplot()
type. Thanks to @zeileis for the original suggestion all the way back in #2 and the eventual solution in #233.type_histogram(free.breaks = <logical>, drop.zeros = <logical>)
arguments enable fine-grained control over this behaviour. (#228 @eleuven and?type_hist
, type_ridge
, etc.)New Features:
axes
argument of tinyplot()
/plt()
gains extra options for fine-grained control of the plot axes. In addition to the existing logical (TRUE
/FALSE
) option, users can now specify one of the following character keywords (or, just their first letters as a convenient shorthand):
"standard"
(with axis, ticks, and labels; equivalent to TRUE
),"none"
(no axes; equivalent to FALSE
),"ticks"
(only ticks and labels without axis line),"labels"
(only labels without ticks and axis line),"axis"
(only axis line and labels but no ticks).xaxt
and yaxt
for separately controlling the two axes using the same keyword options. For example, plt(0:10, xaxt = "l", yaxt = "t")
will yield a plot where the x-axis only contains labels and the y-axis contains both labels and ticks, but no axis line. (#190 @zeileis)varwidth
, notch
, etc. Note that tinyplot(..., type = "boxplot", boxwidth = <num>)
is equivalent to the boxplot(..., width = <num>)
; we just use the âbox(width)â prefix to avoid conflicting with the existing tinyplot(..., width)
argument. (#196 18)Bug fixes:
type = "density"
, which was a regression accidentally introduced in v0.2.0 (#187 18)x
== by
, or these two are functionally identical. (#196 18)xlab
and ylab
arguments not respected in some plots. Thanks to @lbelzile for reporting Issue #203.tinyplot(log(x) ~ x)
. (#197 @zeileis)tinyplot(mpg ~ wt, data = mtcars, facet = am + vs ~ gear)
) now plot all panels correctly, even if some combinations are missing. (#197Internals:
New features:
type = "n"
, i.e. empty plot. Since type = "n"
implicitly assumes points, which limits the type of legend that can be drawn alongside the empty plot, we have also added a companion empty
argument that can be used alongside any plot type. (#157, #167 18)type = "boxplot"
. Simultaneously enables plt(numeric ~ factor)
support, first raised in #2, so that a boxplot is automatically plotted if a numeric is plotted against a factor. (#154 18)type = "polypath"
. (#159 18)type = "rect"
. (#161 18)type = "segments"
. (#163 18)type = "histogram"
(alias type = "hist"
). (#164 18)type = "jitter"
(alias type = "j"
). (#170 18)Internals:
Misc:
Our first CRAN submission! This v0.1.0 release includes the following new features and updates:
License:
Breaking changes:
tinyplot()
function arguments, the following two arguments have been renamed (old
=> new
):
par_restore
=> restore.par
(note the change in word order too!)ribbon_alpha
=> ribbon.alpha
tinyplot
code in the wild, even though it is a breaking change. (#149 18)New features:
by
. Thanks to @zeileis for detailed feedback and advice around the default palette choice (a restricted version of the âviridisâ palette), as well as StackOverflow user mnel, whose answer here provided the inspiration for the final implementation. (#122 18)lwd
argument for adjusting line widths. Similar to pch
, lty
, etc. this arguments also accepts a âbyâ convenience keyword to automatically vary line widths by group. (#134 18)tpar()
now accepts standard par()
arguments in addition to the tinyplot
-specific ones. This allows users to set or query graphical parameters via a single convenience function, instead having to invoke tpar
and par
separately. (#140 18)
tpar()
has gained some additional parameters for fine-grained control of global plot defaults, including grid
, ribbon.alpha
, and various file.*
parameters (see next bullet point).file
argument, alongside corresponding width
and height
arguments for output customization (both of which are defined in inches). For example, tinyplot(..., file = "~/myplot.png", width = 8, height = 5)
. This implementation relies on a simple internal wrapper around the traditional R external graphics devices like png()
, pdf()
, etc. But it may prove more convenient, since the current global graphics parameters held in (t)par()
are carried over to the external device too and donât need to be reset. Note that the appropriate device type is determined automatically by the file extension, which must be one of â.pngâ, â.jpgâ (â.jpegâ), â.pdfâ, or â.svgâ. (#143 18)tinyplot
logo. (#148 18)get_saved_par()
function can be used to retrieve the par
settings from immediately before or immediately after the preceding tinyplot
call. This function replaces some older (non-exported) internal functions that tinyplot
was using to restore and control par
environments. But it could also prove help to end users who are looking for additional ways to restore par
settings after the fact. See ?get_saved_par
for some examples. (#152tinyplot
/plt
gaina a new alpha = <numeric[0,1]>
convenience argument for adding transparency to plot elements and colours. Example use: plt(rnorm(1e3), pch = 19, alpha = 0.3)
. (#129 18)bg
(or its alias, fill
) a numeric in the range [0,1]
. This feature has the same effect as bg = "by"
except for the added transparency. Example use: tinyplot(lat ~ long | depth, data = quakes, pch = 21, cex = 2, bg = 0.2)
. (#129Bug fixes:
tpar(facet.x = ...)
args from being passed forward and set correctly. (#137 18)type = "density"
. (#147Internals:
tinyplot
website. (#135 18)inst/tinytest
is pushing the install tarball over CRANâs recommended 5 MB limit. Please note that local testing of the package requires adding the NOT_CRAN=TRUE
environment variable to your .Renviron file (or, exporting it in your .bashrc/.zshrc/etc. dotfile if you prefer that approach). (#145 9 & 18)density
grid coords. (#150 18)IMPORTANT BREAKING CHANGE:
The package has been renamed to tinyplot. (#22 18)
This package renaming also incorporates the following function changes:
plot2()
is replaced by tinyplot()
(or its shorthand alias plt()
).par2()
is replaced by tpar()
.So, where you used to writeâ¦
library(plot2)
plot2(Sepal.Length ~ Petal.Length | Species, iris)
⦠you should now write:
library(tinyplot)
tinyplot(Sepal.Length ~ Petal.Length | Species, iris)
# Or, use the equivalent shorthand `plt` alias
plt(Sepal.Length ~ Petal.Length | Species, iris)
The package URLs have been updated accordingly:
Many thanks to everyone who provided thoughtful feedback about this prospective name change, especially @zeileis and 9 for kicking off the discussion, as well as the 100+ participants who voted in the social media poll.
For more details about the rational underlying this renaming decision, please see the following GitHub comment, as well as the discussion that preceded it: https://github.com/grantmcdermott/plot2/issues/22#issuecomment-1928472754
0.0.4Website:
We now have a dedicated website! (#80 9)
New features:
cex
and bg
(alias fill
) arguments. The latter also permit the âbyâ convenience keyword similar to lty
and pch
. This is useful for plotting filled point characters (e.g., pch = 21), where you want a different colour for the fill and border. (#50, #75 18)add
argument allows new plot2 objects to be added to / on top of the existing plot window. (#60 18)plot2(~ Temp | Month, airquality)
. (#62 18 and @zeileis)plot2(x, type = "density")
as an alternative to plot2(density(x))
. Works for both the atomic and one-sided formula methods. (#66 18)plot2
gains a new facet
argument for drawing faceted plots. Users can override the default square arrangement by passing the desired number of facet rows or columns to the companion facet.args
helper function. Facets can be combined with by
grouping, or used on their own. (#83, #91, #94, #96, #101, #103 18)plot2
-specific graphical parameters globally via the new par2()
function (which is modeled on the base par()
function). At the moment only a subset of global parameters, mostly related to legend and facet behaviour, are exposed in par2
. But users can expect that more will be added in future releases. (#33, #94 18)Bug fixes:
plot2(rnorm(100)
. (#52 etiennebacher)lmar
and fmar
arguments of par2()
. The default legend margin is par2(lmar = c(1,0, 0.1)
, which means that there is 1.0 line of padding between the legend and the plot region (inside margin) and 0.1 line of padding between the legend and edge of the graphics device (outer margin). Similarly, the default facet padding is par2(fmar = c(1,1,1,1)
, which means that there is a single line of padding around each side of the individual facets. Users can override these defaults by passing numeric vectors of the appropriate length to par2()
. For example, par2(lmar = c(0,0.1)
would shrink the inner gap between the legend and plot region to zero, but leave the small outer gap to outside of the graphics device unchanged. (#94 18)Breaking changes:
palette
argument that unifies the old palette
and (deprecated) palette.args
arguments. In addition, the default palette for small groups has been changed from âOkabe-Itoâ to âR4â. (#31 and #32 18)legend
argument that unifies the previous (deprecated) legend.position
and legend.args
arguments. This change also enables several enhancements over the old legend behaviour; see below. (#34 18)New features:
log
. (#15 @etiennebacher)pch
and lty
arguments now accept a âbyâ convenience keyword for automatically adjusting plot characters and line types by groups. (#28legend
argument, including changing labels, turning of the legend title, and so on. (#34 18)"pointrange"
, "errobar"
, and "ribbon"
plot types. (#35 9, #40 and #46 18)grid = TRUE
as an alternative to grid = grid()
. (#43Bug fixes:
par(pch=X)
globally is now respected. (#20 18)palette("ggplot2")
is now respected. (#44Breaking changes:
New features:
pch
, lty
, and col
types per group (#5 and #11 by 9).Bug fixes:
plot2
now works (#13 by 18, thanks @karoliskoncevicius for reporting).Internals:
plot2.formula
(#8 by @zeileis).Project:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4