ggthemes (development version)
Breaking changes
-
theme_economist(),theme_economist_white(),economist_pal(),scale_colour_economist()andscale_fill_economist()draw the classic Economist style again, as they did before 7.0.0, so code written for them looks as it always did. 7.0.0 had replaced that style with the paper’s 2017 design, so plots made with these functions changed when you updated. In detail:-
theme_economist_white(), thedkpanelargument oftheme_economist()and thefillargument ofeconomist_pal()work again, without the deprecation warnings 7.0.0 added. -
ggthemes_data$economisthas its classicfgandbgtables back, and themainandtexttables added in 7.0.0 are removed, so code that reads those two tables must change. -
economist_seq_pal(),economist_gradient_pal()and thescale_*_economist_c()andscale_*_economist_ordinal()scales, new in 7.0.0, are unchanged (#266).
-
bank_slopes()andbank_plot()now default tocull = TRUE, matchingbank_slopes_multiscale()andbank_plot_multiscale(), so segments with a slope of 0 orInfno longer count toward the aspect ratio. Results change for data that has such segments; usecull = FALSEfor the previous ones (#274).scale_colour_tableau(),scale_fill_tableau(),scale_colour_economist_c(),scale_fill_economist_c()andscale_shape_tremmel()now take...right after their first argument, as ggplot2’s scales do.type,direction,guideandaltmust be named, and passing them by position is an error that says so (#275).
New features
New
scale_colour_continuous_tableau()andtableau_colour_pal()aliases, so every exportedcolorfunction now also has acolourspelling (#269).New “Package data” article on the package website draws every color, shape and linetype in
ggthemes_data, each labeled with the expression that returns it, and theggthemes_datahelp page gains examples of reading it (#265).
Minor improvements and fixes
The deprecation warnings from
theme_hc(bgcolor),theme_pander(ff),theme_pander(fs)and the renamed Tableau palettes"Red-Blue-Brown"and"Classic Area-Brown"now come from lifecycle, so they name the release that deprecated them (#273).bank_plot()andbank_plot_multiscale()now report aplotthat is not a ggplot object, and alayerthat is not a whole number within range, with errors that name the argument (#274).economist_pal(n = 0)no longer fails with “object ‘i’ not found”; it now returnscharacter(0)(#266).few_pal()’spaletteargument now lists its options in the help page, and the deprecation badges in?circlefill_shape_pal,?colorblindand?scale_shape_circlefillnow render instead of showing raw`r lifecycle::badge()`text (#268).scale_fill_colorblind()andscale_fill_colourblind()are no longer deprecated. Onlyscale_colour_colorblind(), which mixes spellings, remains deprecated, and its warning now points toscale_colour_colourblind()instead of wrongly namingscale_color_colorblind()as deprecated (#269).scale_linetype_stata()andstata_linetype_pal()no longer fail with “invalid line type” on plots with 11 or more linetypes. The eleventh, Stata’s longdash_shortdash, was stored as"F434343", which is not a valid R linetype; it is now"F434"(#263).solarized_pal()andtheme_wsj()now give an error that lists the valid values whenaccentorcoloris unknown. Before,solarized_pal()returned a palette with no colors andtheme_wsj()a theme with no background fill (#272).stata_linetype_pal()now warns when asked for more than its 11 linetypes and errors for a negativen, as the other palettes do (#272).tableau_gradient_pal()now gives an error that lists the valid palettes whenpaletteis unknown, instead of “subscript out of bounds”.tableau_seq_gradient_pal()andtableau_div_gradient_pal()now say so when given arguments they ignore (#272).The Tableau “Arrows” and “Thin Arrows” shape palettes in
ggthemes_data$tableau$`shape-palettes`held the same eight characters, so they drew identically. “Arrows” now uses solid arrows (U+2B05 to U+2B0B and U+27A1) and “Thin Arrows” line arrows (U+2190 to U+2199) in the same eight directions. Three other Tableau shapes now carry the variation selector theirunicodefield records: the kpi check mark and multiplication sign gain the text-style selector, and the weather snowman loses a stray one (#264).theme_economist()now gives the panel and strips the blue-gray fill the theme intends. It asked for a color the data never defined, so their fill wasNAand the plot background showed through (#266).theme_economist()now leaves a margin between the title and subtitle, which ran together (#266).theme_solarized_2()now colors its axis lines. A typo in the color name left them unset (#272).
ggthemes 7.0.0
CRAN release: 2026-10-03
Fix
palette_pander()returning a color forn = 0; it now returnscharacter(0).The README is reorganized: an overview of what the package provides, a two-column theme gallery linked to the reference pages, a geoms section and current installation instructions. The full color palette gallery moves to a new “Color palettes” article on the package website, drawn as images; the README’s HTML swatches rendered as empty cells on GitHub, which strips their colors.
Fix
theme_foundation()on ggplot2 >= 4.0.0. It is meant to clear every color and fill inherited fromtheme_grey(), but ggplot2 4.0.0’s S7 theme elements hid them from the check, sotheme_grey()’s gray panel, gray strips and white grid lines leaked into every theme built on it. On ggplot2 4.x this changes the appearance oftheme_base(),theme_calc(),theme_clean(),theme_fivethirtyeight(),theme_foundation(),theme_gdocs(),theme_numbers(),theme_solarized_2(),theme_solid(),theme_stata()andtheme_wsj()back to their intended look, which ggplot2 3.5.x users already saw. In particular,theme_solid(fill = )now fills the panel rather than only the area around it.Expand the README theme gallery to cover every non-deprecated exported theme, pairing each with its matching palette where available.
theme_map()places its legend withlegend.position = "inside"andlegend.position.inside, instead of the numericlegend.positiondeprecated in ggplot2 3.5.0. The legend is drawn in the same place.geom_tufteboxplot()gains alinewidthaesthetic for its lines, as inggplot2::geom_pointrange();sizenow sets only point sizes. This removes the ggplot2 deprecation warnings it emitted on every plot. Settingsizewithoutlinewidthstill widens the lines too, so existing code draws the same, and plots drawn with the defaults are unchanged.stat_fivenumber()declares the aesthetics it drops, so it no longer warns thatywas dropped during the statistical transformation.Fix
solarized_pal()storing the palette function instead of the palette size in itsmax_nattribute. Requesting more than eight colors now pads withNAafter the usual warning instead of failing with “subscript out of bounds”, andn = 0returnscharacter(0).Fix
few_pal()returning two colors forn = 0; it now returnscharacter(0).Require ggplot2 >= 3.5.2.
bank_plot()andbank_plot_multiscale()already calledggplot2::is_ggplot(), so older versions failed at run time.Correct the documented values of
typeinscale_colour_tableau()andscale_fill_tableau(): they are"regular","ordered-sequential"and"ordered-diverging", not"sequential"and"diverging".BREAKING CHANGE:
theme_excel_new()now matches the chart chrome Excel actually draws, decoded from the chart XML that Excel writes. Major gridlines are#D9D9D9rather than#BFBFBF; axis lines are drawn in#BFBFBF, where previously there were none; and axis titles are one point larger than axis labels, as in Excel. Existing plots will change appearance.theme_excel_new()documents that Excel’s font has been Aptos since 2023.base_familystill defaults to"sans", since Aptos is rarely installed outside Office; passbase_family = "Aptos Narrow"for a closer match.Add the current Microsoft Office theme, which Microsoft made the default in 2023, as the
"Office"Excel theme:#156082,#E97132,#196B24,#0F9ED5,#A02B93,#4EA72E.ggthemes_data$excel$themesnow has 51 themes.BREAKING CHANGE:
excel_new_pal(),scale_colour_excel_new()andscale_fill_excel_new()now default totheme = "Office"instead of"Office Theme", so they again match a default chart in current Excel. Plots that relied on the default will change appearance. Passtheme = "Office 2013"to keep the previous colors.The Excel themes
"Office Theme"and"Office 2007-2010"have been renamed"Office 2013"and"Office 2007", following Microsoft’s own renaming of the built-in themes. The old names still work and select the same colors as before.Add
bank_slopes_multiscale()andbank_plot_multiscale(), implementing multi-scale banking to 45 degrees (Heer and Agrawala 2006, section 3). Single-scale banking considers all of the data at once, so it accentuates local features and can obscure larger-scale trends. Multi-scale banking uses spectral analysis to identify the frequency scales that carry real energy, low-pass filters the data to each scale, and banks the resulting trend curve, returning one aspect ratio per scale.bank_slopes_multiscale()returns a tibble of frequencies and ratios;bank_plot_multiscale()returns oneggplotper scale, reproducing the small-multiples display used in the paper. Onsunspot.yearthe implementation selects the same frequency scales the paper reports.stata_shape_pal()now fails with a message naming the offending symbolstyles when Stata’s shape data does not contain the ten the palette selects. It previously looked them up with a barematch(), so a renamed or missingsymbolstyleproduced an all-NArow that was silently dropped as “no font-independent equivalent”, leavingmax_nquietly below the documented ten. The list of ten now lives in one place anddata-raw/build.Rsources it, so the build’s duplicate-pch check cannot run over a stale copy.BREAKING CHANGE:
stata_shape_pal(),calc_shape_pal(),tableau_shape_pal()andcleveland_shape_pal()now return base pch codes by default instead of pch codes derived from Unicode glyphs. R draws a negative pch by asking the device font for that codepoint, so these palettes rendered as blank boxes in a font without coverage — R’s defaultsanscovers one of the eight codepoints they relied on — and aborted outright on basepdf()/postscript(). Passunicode = TRUEto restore the previous values.scale_shape_stata(),scale_shape_calc(),scale_shape_tableau()andscale_shape_cleveland()gain the same argument.BREAKING CHANGE:
max_nis reduced on the default branch for the palettes whose source symbols have no font-independent equivalent:calc13 to 7,tableau_shape_pal("filled")10 to 6,tableau_shape_pal("default")10 to 8,cleveland_shape_pal(overlap = FALSE)5 to 3 andtableau_shape_pal("proportions")5 to 2. Those shapes are dropped rather than approximated by a different shape.stata_shape_pal()andfew_shape_pal()are unaffected — their symbol sets map exactly.BREAKING CHANGE: the
pchcolumn of the shape tables inggthemes_datanow holds the font-independent base pch,NAwhere there is none. The previous Unicode-derived values move to a newpch_unicodecolumn, and a newshapecolumn carries the canonical shape name both are derived from.BREAKING CHANGE:
tremmel_shape_pal()returned symbol sets that did not match Tremmel (1995).n = 2now returns a solid circle and a plus sign (was two circles),overlap = TRUEreturns an empty circle and a plus sign (was a square and a plus sign), andalt = TRUEreturns a solid circle, plus sign and empty triangle (was identical toalt = FALSE, making the argument a no-op).Fix
scale_shape_tremmel()defaulting toalt = TRUEwhiletremmel_shape_pal()defaulted toalt = FALSE, so a palette and its own scale disagreed atn = 3. Both now default toFALSE, the variant Tremmel’s Experiment 1 measured.Fix
cleveland_shape_pal(overlap = TRUE)drawing aWwhere anSwas intended; the stored row paired the nameLATIN CAPITAL LETTER Swith pch 87.Fix mislabelled and corrupted shape data: LibreOffice’s
BLACK DOWN-POINTING CHARACTER(nowTRIANGLE), Google Docs’ star namedMULTIPLICATION X, Excel’s em dash declared asU+2013, and Tableau’sCLOUD WITH RAIN, stored as a mojibake sequence rather thanU+1F327.The shape tables are now validated as they are built: a shape name outside the vocabulary, a
characterthat disagrees with its ownunicode, or two shapes in one palette sharing a pch all fail the build, and the same checks run as tests against the built data.warn_unicode_pch()’s locale guess is joined by a real font-coverage check usingsystemfonts::glyph_info()whensystemfontsis installed, naming the glyphs the device font cannot draw.systemfontsis used inSuggests. The locale and coverage checks are independent failure modes and both run: a UTF-8 session can still meet a font with no glyph, and a font with full coverage still fails withmbcsToSbcson a non-UTF-8 session. Note that R exposes no way to read back a device’sfamily=, so the probe measures the default font and the warning names the font it actually measured.Discrete color palettes now reject a negative
nwith an error naming the argument and the palette that was called. Palettes built onscales::manual_pal()— includingcalc_pal(),canva_pal(),colorblind_pal(),excel_pal(),excel_new_pal(),fivethirtyeight_pal(),gdocs_pal(),hc_pal(),stata_pal()andwsj_pal()— previously failed with R’s internalargument must be coercible to non-negative integerfromseq_len(). This raises the minimum version of scales to 1.4.0, which is wherescales::new_discrete_palette()was introduced.bank_slopes()andbank_plot()report an invalidmethod, andtableau_shape_pal()an invalidpalette, with a message naming the argument and the value supplied instead ofmatch.arg()’s'arg' should be one of .... Misspellings now get a “Did you mean” hint.Deprecate
ptol_pal(),scale_colour_ptol(),scale_color_ptol()andscale_fill_ptol(). Use the khroma package instead, which tracks Paul Tol’s color schemes as he revises them. The ggthemes palette is the original 12-color qualitative scheme from Tol’s 2012 technical note and has not followed the revisions on his current site, https://sronpersonalpages.nl/~pault/; the closest successor iskhroma::colour("muted"). The functions still work, but warn.BREAKING CHANGE: The Tableau palette
"Red-Blue-Brown"has been renamed to"Blue-Red-Brown", matching both the name Tableau uses and the palette’s actual color order (blue, red, brown). The old name still works but warns.BREAKING CHANGE: The Tableau palette
"Classic Area-Brown"has been renamed to"Classic Area Brown", for consistency with its siblings"Classic Area Red"and"Classic Area Green". The old name still works but warns.Fix two corrupted colors in the
"Gray Warm"ordered-sequential Tableau palette. Position 7 was#b047a4(a magenta, in a warm-gray ramp) and is now#b0a8a4; position 18 was#665c51, which broke the ramp’s monotonic blue channel, and is now#665c5a. Plots usingscale_colour_gradient_tableau("Gray Warm")will change appearance.Fix a duplicated color (
#fa9d4f) in the"Red-Gold"ordered-sequential Tableau palette, which gave it 21 colors where every other 20-step Tableau sequential palette has 20. Plots using"Red-Gold"will change appearance.Remove
data-raw/theme-data/tableau-new.yml, an unused duplicate oftableau.yml.The test suite no longer requires suggested packages to be installed.
expect_hexcolor()used stringr and glue on every palette test, and stringr had moved fromImportstoSuggests; it now uses base equivalents. The tests that genuinely need withr or farver skip when those are absent instead of erroring.geom_rangeframe()now errors on asidesvalue that names no side, rather than silently drawing nothing.sidespacks side letters into one string, so a typo such assides = "xy"previously produced an empty layer with no message. Valid values are strings made up of"t","r","b"and"l".Fix the
?extended_range_breakshelp page, which described a functionscales_extended_range_breaks()that does not exist and attributed the wrong return value to each function.extended_range_breaks_()returns the break values;extended_range_breaks()returns a breaks function. The page now also warns that ggplot2 passes abreaksfunction the expanded scale limits, sobreaks = extended_range_breaks()labels the panel edges rather than the data extremes; apply the function to the data to label the extremes.Fix
theme_economist_white()failing on installations without dplyr. The internalget_colors()helper calleddplyr::filter(), but dplyr is a suggested package, not an import; it now uses base subsetting. The test suite no longer uses dplyr either, soR CMD checkpasses with only the hard dependencies installed.Fix the
@familytags that split related help pages apart. Word-order and singular/plural inconsistencies (stata colour,solarized colour,shape stata,shape tableau) each put one page in a family of its own, so it linked to nothing.?extended_range_breakshad no family at all and was unreachable fromtheme_tufte(),geom_rangeframe()andgeom_tufteboxplot(), which it is meant to be used with; those four now cross-reference each other.Add vdiffr visual regression baselines for every exported theme, and swatch baselines plus property assertions (valid hex, no duplicate colors, stable lengths, monotone lightness, no out-of-family color, monotone gray ramps) for the Tableau palette families. These are development-only tests and do not run on CRAN;
vdiffr (>= 1.0.6)andfarverare now used inSuggests(#219).Add support for Stata’s
stscheme family, which has been Stata’s factory default since Stata 18.stata_pal()andscale_colour_stata()gain the"stcolor"scheme (thestc1–stc15colors), andtheme_stata()gains the"stcolor","stcolor_alt","stmono1","stmono2"and"stsj"schemes.stgcolorandstgcolor_altare not included: they differ fromstcoloronly in physical graph dimensions, which a ggplot2 theme does not carry.The 19 named colors Stata 18 added (
stc1–stc15plus thestblue,stred,stgreenandstyellowaliases) are now inggthemes_data$stata$colors$names.Omitting
schemeinstata_pal(),scale_colour_stata(),scale_fill_stata()andtheme_stata()is now soft-deprecated. It still resolves to"s2color", but the default will change to"stcolor"in ggthemes 8.0.0, following Stata. Passschemeexplicitly to keep the current appearance.BEHAVIOR CHANGE:
stata_pal("mono")returned the wrong colors at positions 6 and 12 (gs14andgs15instead ofgs12andgs5). It now matches Stata’ss1mono/s2monoexactly, including the fact that Stata repeatsgs12andgs5at positions 14 and 15. Plots using"mono"with six or more levels will change.Fix
stata_pal("economist"), which returnedNAas its first color because the scheme referred to a non-existent colordkblue. It is nowedkblue, matching Stata’sscheme-economist.scheme.Fix
attr(stata_pal(scheme), "max_n"), which reported2rather than15because it measured the columns of the palette table instead of its rows.Add Apple Numbers support:
numbers_pal(),scale_colour_numbers(),scale_color_numbers(),scale_fill_numbers(), andtheme_numbers(). All 12 Numbers chart palettes are available by their Numbers names ("Classic", the default, through"Spectrum"), each providing six series colors.theme_numbers()follows the chart style defaults that ship inside Numbers: no panel fill, gridlines in the value direction only, a bottom chart border, and no tick marks.The palettes are generated from Apple Numbers 14.5 by
data-raw/reference/numbers/fetch.shanddata-raw/numbers_palettes.R; seedata-raw/reference/numbers/SOURCES.md. This replacesdata-raw/theme-data/numbers-charts.yml, an unused file added in 2018 that was never wired intodata-raw/build.Rand held iWork-era colors matching no current Numbers palette.Fix two incorrect colors in the Google Docs palette, checked against the series colors a current Google Sheets chart actually renders.
teal 2was#ff994d, a duplicate oforange 2, and is now#7ed1d7;teal 3was#c9e4e7and is now#b5e5e8. This changes the output ofgdocs_pal(),scale_colour_gdocs(), andscale_fill_gdocs()for more than 11 colors. The other 22 colors were already correct.theme_gdocs()now matches the text colors Google Sheets uses. Sheets applies a graded hierarchy rather than one gray: axis tick labels are black, legend labels#1a1a1a, and axis titles and the x-axis line#333333. The chart title (#757575) and gridlines (#cccccc) are unchanged.BREAKING CHANGE:
hc_pal("default")now returns the palette Highcharts has used by default since v11.0.0 (#2caffe,#544fc5,#00e272, …). It previously returned the palette used before v11 (#7cb5ec,#434348, …), which Highcharts replaced in April 2023. Plots usingscale_colour_hc()orscale_fill_hc()without an explicitpalettewill change appearance. The old palette is still available ashc_pal("classic").BEHAVIOR CHANGE: two colors in that older palette were wrong, and are corrected in
"classic". Position 8 was#8085e8(a near-duplicate of#8085e9at position 5, differing by one hex digit) and is now#2b908f; position 9 was#8d4653and is now#f45b5b. The old values match Highcharts 4.x; every Highcharts release from v5.0.0 to v10.x shipped the corrected pair.hc_pal()andscale_colour_hc()/scale_fill_hc()gain the palettes bundled with Highcharts 13:"default_dark"(the dark-mode form of the default, which Highcharts selects via CSSlight-dark()),"high_contrast_light"and"high_contrast_dark"(Highcharts’ own palette, tested for color blindness and tailored to 3:1 contrast),"grid_light","sand_signika","avocado"and"sunset". Note that"avocado"and"sunset"have only four colors.hc_pal()now reports amax_nattribute and warns when asked for more colors than the palette holds, matching the other ggthemes palettes.theme_hc()‘s horizontal grid lines are now#e6e6e6, matching Highcharts’--highcharts-neutral-color-10, rather than#D8D8D8.theme_hc()gains the"default_dark","grid_light"and"sand_signika"styles."grid_light"is the one Highcharts theme that draws vertical grid lines. The"high_contrast","avocado"and"sunset"themes are not included as styles: upstream they change nothing but the series colors, so they are available throughhc_pal()and are meant to be combined withtheme_hc("default")ortheme_hc("default_dark").BEHAVIOR CHANGE:
theme_hc("darkunica")drew all text in#A0A0A3and titles in#FFFFFF. Highcharts uses#E0E0E3for axis labels, titles and axis titles in this theme, so text is now#E0E0E3throughout. The grid color#707073was already correct and is unchanged.Fix unreadable axis labels in
theme_hc("darkunica").theme_hc()is a partial theme, and it never setaxis.text, so the axis labels kepttheme_grey()’s"grey30"and were drawn in dark gray on the near-black background. They now use the same color as the rest of the theme’s text.Remove
data-raw/theme-data/highcharts.yml, an unused duplicate ofhc.ymlthat still held the palettes from before v11.theme_hc()’s examples now passstylerather than the deprecatedbgcolor, and the last example usesscale_colour_hc()instead ofscale_fill_hc(), which had no effect on its color-mapped lines.BREAKING CHANGE:
theme_economist()andeconomist_pal()now follow the chart design The Economist introduced in 2017 and still publishes, replacing the pre-2017 style ggthemes had shipped since 2013. Existing plots will change appearance. The new look draws a white panel on a pale#e9edf0ground with light horizontal gridlines, a black x-axis baseline with tick marks below it (they previously pointed inward), and no y-axis rule or ticks.economist_pal()returns the nine current chart colors (#006ba2,#3ebcd2,#379a8b,#ebb434,#b4ba39,#9a607f,#d1b07c,#758d99,#db444b) in place of the old blues and greens. Colors and geometry are transcribed from The Economist visual styleguide v1.2 (4 May 2017); seedata-raw/reference/economist/.ggthemes_data$economistis restructured to match:main(the nine series colors plus “Econ red”),scales(the styleguide’s “equal lightness colour scales”, six ordered steps for each of the nine hues),bg, andtext. The formerfgandbgentries are gone; their values are recorded in a comment indata-raw/theme-data/economist.yml.Add
economist_seq_pal()andeconomist_gradient_pal(), plusscale_colour_economist_c()/scale_fill_economist_c()for continuous data andscale_colour_economist_ordinal()/scale_fill_economist_ordinal()for ordered factors, built from the equal-lightness scales.Deprecate
theme_economist_white()(lifecycle::deprecate_warn()); the current design already draws a white panel, so it no longer differs fromtheme_economist(), to which it now forwards.Deprecate the
dkpanelargument oftheme_economist()and thefillargument ofeconomist_pal(). Both were features of the pre-2017 design and are now ignored.Fix:
theme_economist()previously looked up a background color named"ebg", whicheconomist.ymldid not define, sorectandstrip.backgroundsilently received a fill ofNA. The rewritten theme sets both explicitly.
ggthemes 6.0.0
CRAN release: 2026-08-30
-
circlefill_shape_pal()andscale_shape_circlefill(), soft-deprecated since ggthemes 5.0.0, now always warn on use (lifecycle::deprecate_warn()) instead of only when called directly by the user - BREAKING CHANGE: Bump minimum supported R version to 4.1.0, and use the base pipe (
|>) instead of the magrittr pipe (%>%) indata-raw/and examples, to match the current Tidyverse Style Guide (lintr’spipe_consistency_linteris now a default linter requiring|>, which was failing CI) - chore: Modernize GitHub Actions workflows: bump
actions/checkout,actions/upload-artifact, and the pkgdown deploy action to their current pinned versions; add explicitpermissions:blocks; migratetest-coverage.yamlfromcovr::codecov()tocovr::package_coverage()+ the officialcodecov/codecov-action - Fix stale
branch/masterCodecov badge in README (now points atmain) - Add
"ao"(Average Absolute Orientation) and"was"(Weighted Average Absolute Slope) methods tobank_slopes(), following Heer and Agrawala (2006). Also declarestatsas an explicitImportsdependency, sincebank_slopes()callsstats::median()/stats::uniroot()/stats::weighted.mean(), and fix thebank_slopes()example so each method’s ratio is actually applied viacoord_fixed()instead of just computed and discarded - Add
bank_plot(), a wrapper aroundbank_slopes()that extractsx/ydirectly from an already-builtggplot(respecting stats, position adjustments, groups, and facets) and returns the plot withcoord_fixed()applied, so banking a plot no longer requires manually reconstructing its plotted vectors - Bugfix:
bank_slopes(method = "ao")now returnsNaN(matching the other methods) instead of erroring when there is no vertical variation (e.g. a flat line) or too few points to compute a slope - Bugfix:
bank_plot()now rejects a non-positivelayerwith the intendedcli_abort()message instead of falling through to a raw subsetting error - Bugfix: Fix
excel_new_pal()example so it actually generates output (#199) - Bugfix:
extended_range_breaks_()now respects thenargument instead of silently ignoring it (#139) - Add
blackargument tocolorblind_pal(),scale_colour_colourblind(),scale_color_colorblind(),scale_fill_colorblind(), andscale_fill_colourblind(); setblack = FALSEto drop black from the colorblind-safe palette (#178) - Add
ink,paper, andaccentarguments totheme_foundation(), matching ggplot2’s owntheme_gray(ink=, paper=, accent=). Branded themes (e.g.theme_economist(),theme_excel()) intentionally replicate a fixed published style and do not expose these (#183) - Bugfix:
theme_economist()/theme_economist_white()andtheme_excel()now respect thebase_familyandbase_sizearguments (#135) - Bugfix:
theme_excel_new()now scalesaxis.text,strip.text,legend.text, andplot.titlewithbase_size, and no longer blanks out axis titles by default (#176) - Bugfix:
geom_rangeframe()no longer silently drops the entire range line for an aesthetic when the data contains missing values;na.rmnow behaves as documented (#177) - Clarify in
geom_rangeframe()docs (and add an example) thatsides = "trbl"already draws correctly-positioned frames on panels with a secondary axis, sinceggplot2::sec_axis()only relabels the existing scale rather than introducing a separate data range (#179) - Add
midpointargument toscale_colour_gradient2_tableau(),scale_fill_gradient2_tableau(), andscale_color_gradient2_tableau()to control which data value maps to the middle color of the diverging palette (#136) -
cleveland_shape_pal(overlap = FALSE)andtableau_shape_pal()now warn with an actionable message when their Unicode-derived pch codes are likely to fail to render (non-UTF-8 locale), instead of only surfacing a cryptic low-level “conversion failure … in ‘mbcsToSbcs’” error at draw time (#164) - chore: Replace base
stop()/warning()withcli::cli_abort()/cli::cli_warn()throughout, matching current tidyverse convention (used by ggplot2/dplyr). Error/warning text is largely the same information, reformatted for clarity; a few tests were updated to match. Addcliandrlangto Imports. - chore: Use
rlang::check_installed()instead of a manualrequireNamespace()+stop()check for thequantregdependency instat_fivenumber()’s weighted case, which prompts an interactive install instead of just erroring. The genuinely optionalpander-availability checks intheme_pander()/palette_pander()are left asrequireNamespace(), sincecheck_installed()is for hard requirements. - Bugfix: Fix 301 error in link (#196)
ggthemes 5.2.0
CRAN release: 2025-11-30
- Renamed
scale_colour_colorblind()toscale_colour_colourblind()(#180). - Updated
theme_solarizedto fixkey.backgroundcolor. - Bugfix: Fix documentation cross-links (#186)
- Bugfix: Removed usage of deprecated ggplot functions
ggthemes 5.0.0
CRAN release: 2023-11-21
- Deprecate
circlefill_shape_palandscale_shape_circlefill - Bugfix: Fix failing CRAN tests. Shape scales and palettes could fail if glyphs unavailable in graphics devices.
- Bugfix: Add alias to
ggthemes-package - Add
quantregto suggested packages
ggthemes 4.2.1
- Conditionally use the vdiffr package in tests so it complies with suggested package policy (#124)
- Fix error in
expect_equalfunctions (#123) - Fix errors in
geom_tufteboxplotandstat_fivenumberdue to missing imported objects from ggplot2 (#117, #121) - Fix text labels in top axis in
theme_economist(#115) - Update documentation on
geom_rangeframe; it should be used withcoord_cartesian(clip="off"). (#120)
ggthemes 4.2.0
CRAN release: 2019-05-13
- Add
theme_clean()(Thanks @konradzdeb, #105) - Add
directionargument toscale_color_tableau()andscale_fill_tableau()(Thanks @vadimus202, #112)
ggthemes 4.1.1
CRAN release: 2019-04-09
- Fix bugs in
geom_rangeframeandgeom_tufteboxplotcaused by failing to importalpha. (Thanks @flying-sheep, #110)
ggthemes 4.1.0
CRAN release: 2019-02-19
- Add
typeargument toscale_color_tableauso that sequential and diverging palettes can be used in discrete scales. (Thanks @onesandzeroes, #108) - Fix colors in “Purple” and “Blue-Teal” palettes in
tableau_color_pal(). (Thanks @leonawicz, #109)
ggthemes 4.0.1
CRAN release: 2018-08-24
- Fix bugs in
tableau_color_pal(). Wrong colors in “Tableau 20” theme (Thanks @friskin, #95), and incorrect order of classic color palettes (Thanks @luca-scr, #96). - Fix fatal bug in
theme_solarized()andsolarized_rebase(). (Thanks @mdodrill-usgs, #97)
ggthemes 4.0.0
CRAN release: 2018-07-19
Added palettes and based on current versions of Excel:
excel_pal_new(),scale_colour_excel_new(), andscale_fill_excel_new(). Excel ’97 based scales keep the same names.Added
theme_excel_new()which is based on the chart defaults of current versions of Excel.Added Tableau 10 palettes and renamed old palettes in
tableau_color_pal(),scale_color_tableau(),scale_fill_tableau(), and others. The continuous sequential and diverging palettes are improved by including more intermediate steps.Updated
theme_gdocs()to current look.Updated
scale_color_gdocs()andfill_color_gdocs()to current color.Added
scale_shapes_few()andfew_shape_pal()with a shape scale and palette from Stephen Few’s “Show Me the Numbers”.Removed
stataargument fromscale_*_economist()andtheme_economist().Changed the format of the
ggthemes_dataobject.Changed behavior of
few_pal(). Ifn = 1, use gray. Ifn > 1use non-gray colors.Changed
tremmel_shape_scale()to usealt = TRUEby defaultDeprecated
tremmel_shape_scale()argumentn3alt. Use thealtargument instead.Added a pkgdown site.
Removed vignette. Move all examples to man pages.
Bugfix: Fix
theme_few()(#91)Bugfix: Update themes to be consistent with
ggplot>=3.2.0
ggthemes 3.5.0
CRAN release: 2018-05-07
Bugfix: Fix RGB colors in
scale_color_few(),scale_fill_few(), andfew_pal()(#89, @bpbraun)Update documentation to include mentions of the maximum number of values that discrete scales support (#85)
ggthemes 3.4.2
CRAN release: 2018-04-03
- Bugfix: Fix example code in
theme_economist(). Thanks @carlganz #81. - Remove suggests dependencies:
reshape2,plyr,tidyverse
ggthemes 3.4.1
- Bugfix: Resolve duplicate palette names in
canva_palettes(). Thanks @Eluvias (#78)
ggthemes 3.4.0
CRAN release: 2017-02-19
Add color palettes from canva.com:
canva_palettes(),canva_pal(),scale_colour_canva().Use
NEWS.mdinstead ofNEWSUpdate Economist examples to put y-axis on the right side.
ggthemes 3.3.0
CRAN release: 2016-11-24
Update themes to changes in ggplot 2.1.0.9000. Thanks @juliasilge (#71)
tufte_boxplot()usesposition="dodge"by default. Thanks @jgellar (#68)Bugfix: Fix errors in
geom_rangeframe()in new version of ggplot2. Thanks @coulmont (#70)
ggthemes 3.2.0
CRAN release: 2016-07-11
- Bugfix: In function
bank_slopes(), remove methodsao,gor, andlor. These methods were not producing reliable results, and should not produce results much different thanmsoras. If used, they will produce a warning, andmswill be used instead. (#68)
ggthemes 3.1.0
- Add
ptol_pal(),scale_colour_ptol(), andscale_file_ptol()based on Paul Tol’s qualitative color palettes. Thanks @jmlondon. (#65)
ggthemes 3.0.4
- Fix panel.grid.major.y colors for
theme_hc(). Thanks @flying-sheep! (#64)
ggthemes 3.0.1
CRAN release: 2016-01-10
Bugfix: Remove border around legends in
theme_gdocs(). Thanks SandyMuspratt! Pull request #53.Bugfix: Remove border around legends in
theme_calc().Bugfix: Add color and fill values to
theme_foundation(). This restores its behavior to version 2.2.1. Fixes Issue #56.
ggthemes 3.0.0
CRAN release: 2015-12-20
For
geom_tufteboxplot()andGeomTufteboxplot, optionmedian.typesupports onlylineandpointoptions. Added optionwhisker.typewhich allows for whiskers to be specified by lines or points.Changed default stat for
geom_tufteboxplot()tostat_fivenumber().Added
theme_base()andtheme_par()Removed
scale_(x|y)_tufte(). See issue #49theme_foundation()rewritten. Removeduse_sizesargument.Import rather than depend on
ggplot2Update geoms, scales, and themes to ggplot >= 2.0.0
ggthemes 2.2.1
CRAN release: 2015-07-01
bugfix: fix R CMD check notes due to change in how it handles non-base default packages: https://developer.r-project.org/blosxom.cgi/R-devel/2015/06/29
bugfix: fix bad URLs
ggthemes 2.2.0
- Added
theme_map()from @hrbrmstr
ggthemes 2.1.1
- bugfix: use title case in package title; refer to ggplot2 in title
- bugfix: fix non-escaped URLs in colorblind.R
- bugfix: fix broken URL in few.R
- bugfix: remove non-ascii characters in shapes.R
- bugfix: use
requireNamespace()instead ofrequire()
ggthemes 2.1.0
CRAN release: 2014-12-18
- New theme and scale based on Highcharts JS:
scale_*_hc(),theme_hc(). Thanks jbkunst!
ggthemes 2.0.0
New options for
geom_tufteboxplot().median.typetakes values “point”, “box”, or “line”. Optionuseboxis no longer supported, and equivalent tomedian.type="box". Thanks weitzner! Issue #13, PR #19.All theme functions have
base_sizeandbase_familyas first two arguments. This affectstheme_economist_white(),theme_excel(),theme_pander(),theme_solid(), andtheme_tufte(). Thanks ptoche! Issue #25.theme_pander(): Optionsffandfsare deprecated; usebase_familyandbase_sizeoptions instead, respectively.
ggthemes 1.9.0
added vignette
added themes / scales based on factory defaults of pander package:
pander_palette(),scale_color_pander(),scale_fill_pander(),theme_pander(). Thanks daroczig.added additional fill and gradient color scales:
scale_fill_fivethirtyeight(),scale_colour_gradient_tableau(),scale_fill_gradient_tableau(),scale_fill_continuous_tableau(),scale_colour_gradient2_tableau(),scale_fill_gradient2_tableau(). Thanks bowerth.
ggthemes 1.8.0
- added themes and color scale from fivethirtyeight.com:
theme_fivethirtyeight(),fivethirtyeight_pal(),scale_color_fivethirtyeight()
ggthemes 1.7.0
CRAN release: 2014-04-22
- added a new breaks algorithm:
scales_extended_range_breaks(),extended_range_breaks() - added scales which implement the breaks algorithm:
scale_x_tufte(),scale_y_tufte() - added new label format:
smart_digits(),smart_digits_format()
ggthemes 1.6.1
- fix bug in
theme_wsj()(issue #17)
ggthemes 1.5.0
- added alternative Solarized theme:
theme_solarized_2() -
theme_solarized(): adjusted the colors - added LibreOffic Calc themes and palettes:
theme_calc(),calc_pal(),scale_fill_calc(),scale_colour_calc(),cacl_shape_pal(),scale_shape_calc() - added Google Docs themes and palettes:
theme_gdocs(),gdocs_pal(),scale_fill_gdocs(),scale_colour_gdocs() - fixed some examples
ggthemes 1.4.0
- fix bug in default palettes of
scale_colour_excel()andscale_fill_excel().
ggthemes 1.3.4
- added Tableau sequential color palettes:
tableau_seq_gradient_pal(),scale_colour_gradient_tableau(),scale_fill_gradient_tableau(). - added Tableau diverging color palettes:
tableau_div_gradient_pal(),scale_colour_gradient2_tableau(),scale_fill_gradient2_tableau(). -
tableau_colour_pal(): added palette “cyclical
ggthemes 1.3.1
CRAN release: 2012-12-22
-
bank_slopes()returns y/x aspect ratio to be compatible withcoord_fixed() - improved documentation
ggthemes 1.3.0
- renamed
theme_excel2003()totheme_excel() - replace
scale_fill_excel2003()andscale_fill_excel10()withscale_fill_excel() - replaced
scale_colour_excel2003()andscale_colour_excel10()withscale_colour_excel() - replaced
excel2003_pal()andexcel10_pal()withexcel_pal() - renamed
theme_base()totheme_foundation()
ggthemes 1.2.0
- added colorblind scales:
colorblind_pal(),scale_*_colorblind().
ggthemes 1.1.0
- added Wall Street Journal themes, palettes, scales:
theme_wsj(),wsj_pal(),scale_colour_wsj(), andscale_fill_wsj(). - added function
bank_slopes(): methods for determining the optimal slope ratio. - added
theme-foundation(): a theme designed to be easy to extend into new themes. - added NEWS file
