From 1362d3a81625d3fe4ff1f0cf91f2cb61380f2781 Mon Sep 17 00:00:00 2001 From: Utkarsh Date: Tue, 10 Mar 2026 17:53:57 +0530 Subject: [PATCH 1/3] Add example gallery vignette with thumbnail plots (#437) - New vignette: example-gallery.Rmd with ~60 thumbnail plot cards organized in a CSS grid layout (PPC, PPD, MCMC, HMC/NUTS sections) - Updated _pkgdown.yml: added Gallery navbar link and article section - Added NEWS.md entry for the new gallery vignette - Uses only built-in example data (no rstanarm dependency) --- NEWS.md | 3 + _pkgdown.yml | 11 +- vignettes/example-gallery.Rmd | 1329 +++++++++++++++++++++++++++++++++ 3 files changed, 1342 insertions(+), 1 deletion(-) create mode 100644 vignettes/example-gallery.Rmd diff --git a/NEWS.md b/NEWS.md index 25c323e3..6f538289 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,8 @@ # bayesplot (development version) +* New "Example Gallery" vignette providing a visual overview of all plotting + functions with thumbnail example plots, organized by category (PPC, PPD, MCMC, + HMC/NUTS). (#437) * New functions `mcmc_dots` and `mcmc_dots_by_chain` for dot plots of MCMC draws by @behramulukir (#402) * Default to `quantiles=100` for all dot plots by @behramulukir (#402) diff --git a/_pkgdown.yml b/_pkgdown.yml index 4388eb8c..7161176f 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -12,10 +12,13 @@ navbar: title: "bayesplot" structure: - left: [home, vignettes, functions, news, pkgs, stan] + left: [home, gallery, vignettes, functions, news, pkgs, stan] right: [search, bluesky, forum, github, lightswitch] components: + gallery: + text: Gallery + href: articles/example-gallery.html pkgs: text: Other Packages menu: @@ -37,6 +40,12 @@ navbar: href: https://mc-stan.org/shinystan articles: + - title: "Example Gallery" + desc: > + A visual overview of all plotting functions available in **bayesplot**, + organized by category with thumbnail example plots. + contents: + - example-gallery - title: "Getting Started" desc: > These vignettes provide an introduction to visualizing MCMC draws and diff --git a/vignettes/example-gallery.Rmd b/vignettes/example-gallery.Rmd new file mode 100644 index 00000000..cbdfe145 --- /dev/null +++ b/vignettes/example-gallery.Rmd @@ -0,0 +1,1329 @@ +--- +title: "Example Gallery" +author: "bayesplot team" +date: "`r Sys.Date()`" +output: + rmarkdown::html_vignette: + toc: true + toc_depth: 2 +params: + EVAL: !r identical(Sys.getenv("NOT_CRAN"), "true") +vignette: > + %\VignetteIndexEntry{Example gallery} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r setup, include=FALSE} +stopifnot(require("knitr")) +library("bayesplot") +library("ggplot2") + +knitr::opts_chunk$set( + dev = "png", + dpi = 96, + fig.width = 3.5, + fig.height = 2.8, + out.width = "100%", + fig.align = "center", + comment = NA, + eval = if (isTRUE(exists("params"))) params$EVAL else FALSE, + message = FALSE, + warning = FALSE +) + +bayesplot_theme_set(theme_default(base_size = 8)) +color_scheme_set("brightblue") +set.seed(8420) + +# Prepare shared example data +y <- example_y_data() +yrep <- example_yrep_draws() +x <- example_x_data() +group <- example_group_data() +draws <- example_mcmc_draws(params = 6) +``` + +```{css gallery-styles, echo=FALSE} +/* ---- Gallery grid layout ---- */ +.gallery-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); + gap: 1.2em; + margin-bottom: 2em; +} +.gallery-card { + border: 1px solid #ddd; + border-radius: 6px; + overflow: hidden; + background: #fff; + transition: box-shadow 0.2s; +} +.gallery-card:hover { + box-shadow: 0 2px 12px rgba(0,0,0,0.12); +} +.gallery-card img { + width: 100%; + display: block; +} +.gallery-card .card-label { + padding: 0.5em 0.75em; + font-family: 'SFMono-Regular', 'Menlo', monospace; + font-size: 0.85em; + text-align: center; + border-top: 1px solid #eee; +} +.gallery-card .card-label a { + color: #2171b5; + text-decoration: none; +} +.gallery-card .card-label a:hover { + text-decoration: underline; +} + +/* make the vignette wider for the gallery layout */ +.main-container { + max-width: 960px !important; +} +``` + +This gallery provides a visual overview of all the plotting functions available +in the **bayesplot** package, organized by category. Click on any function name +to see its full documentation. + +> **See also:** The +> [Plotting MCMC draws](plotting-mcmc-draws.html), +> [Visual MCMC diagnostics](visual-mcmc-diagnostics.html), and +> [Graphical PPCs](graphical-ppcs.html) vignettes provide in-depth tutorials. + + +# PPC: Posterior Predictive Checks {#ppc} + +Plotting functions for graphical posterior predictive checks, comparing +observed data `y` to simulated data `yrep` from the posterior predictive +distribution. See `help("PPC-overview")` for details. + +## Distributions {#ppc-distributions} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Test Statistics {#ppc-test-statistics} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Intervals {#ppc-intervals} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Scatterplots {#ppc-scatterplots} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Errors {#ppc-errors} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Discrete {#ppc-discrete} + +```{r setup-discrete, echo=FALSE} +# Create simple discrete data for these plots +set.seed(123) +y_disc <- rpois(200, lambda = 3) +yrep_disc <- matrix(rpois(200 * 100, lambda = 3), nrow = 100) +group_disc <- factor(rep(c("A", "B"), each = 100)) +``` + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## LOO Predictive Checks {#ppc-loo} + +```{r setup-loo, echo=FALSE} +# Pre-compute PIT values and LOO intervals for these plots +# (avoids needing the loo and rstantools packages) +set.seed(456) +pit_vals <- runif(length(y)) # simulated PIT values for demonstration + +# Pre-computed LOO predictive intervals (5 columns: ll, l, m, h, hh) +loo_intervals <- cbind( + ll = apply(yrep, 2, quantile, probs = 0.05), + l = apply(yrep, 2, quantile, probs = 0.25), + m = apply(yrep, 2, quantile, probs = 0.50), + h = apply(yrep, 2, quantile, probs = 0.75), + hh = apply(yrep, 2, quantile, probs = 0.95) +) +``` + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Censoring {#ppc-censoring} + +```{r setup-censoring, echo=FALSE} +# Create survival-type data for censoring plots +if (requireNamespace("survival", quietly = TRUE)) { + set.seed(789) + n_cens <- 100 + y_cens <- rexp(n_cens, rate = 0.5) + status_cens <- rbinom(n_cens, 1, prob = 0.7) + y_cens[status_cens == 0] <- runif(sum(status_cens == 0), 0, y_cens[status_cens == 0]) + yrep_cens <- matrix(rexp(n_cens * 50, rate = 0.5), nrow = 50) + cens_val <- ifelse(status_cens == 1, y_cens, NA) + group_cens <- factor(rep(c("A", "B"), each = n_cens / 2)) +} +has_survival <- requireNamespace("survival", quietly = TRUE) +``` + +```{r results='asis', echo=FALSE} +cat('\n') +``` + + +# PPD: Posterior/Prior Predictive Distributions {#ppd} + +Plots of posterior (or prior) predictive distributions *without* +comparing to observed data. These are the counterparts of the PPC +functions above but take only `ypred` rather than both `y` and `yrep`. +See `help("PPD-overview")` for details. + +## Distributions {#ppd-distributions} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Intervals {#ppd-intervals} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Test Statistics {#ppd-test-statistics} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + + +# MCMC: Markov Chain Monte Carlo {#mcmc} + +Plotting functions for MCMC draws and diagnostics. +See `help("MCMC-overview")` for details. + +## Intervals & Areas {#mcmc-intervals} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Distributions {#mcmc-distributions} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Traces & Rank Plots {#mcmc-traces} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Scatterplots {#mcmc-scatterplots} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Diagnostics {#mcmc-diagnostics} + +```{r setup-diagnostics, echo=FALSE} +# Create example diagnostic values +set.seed(321) +rhat_vals <- c(1.00, 1.01, 1.02, 1.005, 1.08, 1.001) +names(rhat_vals) <- dimnames(draws)[[3]] +neff_vals <- c(0.9, 0.8, 0.7, 0.85, 0.5, 0.95) +names(neff_vals) <- dimnames(draws)[[3]] +``` + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Parallel Coordinates {#mcmc-parcoord} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Recovery {#mcmc-recover} + +```{r setup-recover, echo=FALSE} +# Create example "true" parameter values for recovery plots +true_vals <- c(alpha = 2.5, sigma = 1.2, "beta[1]" = 0.5, "beta[2]" = -0.3, + "beta[3]" = 0.8, "beta[4]" = -1.1) +``` + +```{r results='asis', echo=FALSE} +cat('\n') +``` + +## Combo Plots {#mcmc-combo} + +```{r results='asis', echo=FALSE} +cat('\n') +``` + + +# HMC/NUTS Diagnostics {#nuts} + +Diagnostic plots specific to Hamiltonian Monte Carlo (HMC) and the No-U-Turn +Sampler (NUTS). These functions require NUTS-specific diagnostic information. +See `help("MCMC-nuts")` for details. + +```{r setup-nuts, echo=FALSE} +# Simulate simple NUTS diagnostic data +set.seed(654) +n_iter <- 250 +n_chains <- 4 +np_data <- data.frame( + Parameter = rep(c("accept_stat__", "stepsize__", "treedepth__", + "n_leapfrog__", "divergent__", "energy__"), each = n_iter * n_chains), + Value = c( + rbeta(n_iter * n_chains, 20, 1), # accept_stat__ + rep(c(0.8, 0.9, 0.85, 0.75), each = n_iter), # stepsize__ + sample(2:6, n_iter * n_chains, replace = TRUE, prob = c(0.05, 0.3, 0.4, 0.2, 0.05)), # treedepth__ + 2^sample(2:6, n_iter * n_chains, replace = TRUE, prob = c(0.05, 0.3, 0.4, 0.2, 0.05)), # n_leapfrog__ + rbinom(n_iter * n_chains, 1, 0.02), # divergent__ + rnorm(n_iter * n_chains, -200, 5) # energy__ + ), + Chain = rep(rep(1:n_chains, each = n_iter), 6), + Iteration = rep(rep(1:n_iter, n_chains), 6) +) + +lp_data <- data.frame( + Value = rnorm(n_iter * n_chains, -200, 2), + Chain = rep(1:n_chains, each = n_iter), + Iteration = rep(1:n_iter, n_chains) +) +``` + +```{r results='asis', echo=FALSE} +cat('\n') +``` From 8419e62dfa1b76ed5ce35ee6aaa043aa6ed6eb19 Mon Sep 17 00:00:00 2001 From: Utkarsh Date: Tue, 10 Mar 2026 18:43:05 +0530 Subject: [PATCH 2/3] Address code review feedback on example gallery (#437) - Add gallery_card() and gallery_card_cond() helpers to reduce boilerplate HTML - Use absolute URLs for all links - Make thumbnail images clickable by wrapping them in anchor tags - Add alt text (function name) and loading='lazy' to all images - Clean up censoring setup chunk to remove unused variable --- vignettes/example-gallery.Rmd | 464 +++++++++------------------------- 1 file changed, 122 insertions(+), 342 deletions(-) diff --git a/vignettes/example-gallery.Rmd b/vignettes/example-gallery.Rmd index cbdfe145..ae025198 100644 --- a/vignettes/example-gallery.Rmd +++ b/vignettes/example-gallery.Rmd @@ -44,6 +44,43 @@ group <- example_group_data() draws <- example_mcmc_draws(params = 6) ``` +```{r gallery-helpers, echo=FALSE} +# Base URL for reference pages +ref_base <- "https://mc-stan.org/bayesplot/reference/" + +# Helper: emit one gallery card (clickable thumbnail + linked label) +gallery_card <- function(chunk_label, ref_page, fn_name) { + url <- paste0(ref_base, ref_page) + cat('\n') +} + +# Helper for conditional cards (e.g. requiring optional packages) +gallery_card_cond <- function(chunk_label, ref_page, fn_name, condition, + fallback = "Requires survival package") { + url <- paste0(ref_base, ref_page) + cat('\n') +} +``` + ```{css gallery-styles, echo=FALSE} /* ---- Gallery grid layout ---- */ .gallery-grid { @@ -115,10 +152,7 @@ print(p) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_hist", "PPC-distributions.html", "ppc_hist") ``` ```{r ppc_dens, echo=FALSE, fig.show='hide'} @@ -126,10 +160,7 @@ ppc_dens(y, yrep[200:202, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_dens", "PPC-distributions.html", "ppc_dens") ``` ```{r ppc_dens_overlay, echo=FALSE, fig.show='hide'} @@ -137,10 +168,7 @@ ppc_dens_overlay(y, yrep[1:25, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_dens_overlay", "PPC-distributions.html", "ppc_dens_overlay") ``` ```{r ppc_ecdf_overlay, echo=FALSE, fig.show='hide'} @@ -148,10 +176,7 @@ ppc_ecdf_overlay(y, yrep[sample(nrow(yrep), 25), ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_ecdf_overlay", "PPC-distributions.html", "ppc_ecdf_overlay") ``` ```{r ppc_freqpoly, echo=FALSE, fig.show='hide'} @@ -159,10 +184,7 @@ ppc_freqpoly(y, yrep[1:3, ], alpha = 0.1, size = 1) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_freqpoly", "PPC-distributions.html", "ppc_freqpoly") ``` ```{r ppc_freqpoly_grouped, echo=FALSE, fig.show='hide'} @@ -170,10 +192,7 @@ ppc_freqpoly_grouped(y, yrep[1:3, ], group, freq = FALSE) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_freqpoly_grouped", "PPC-distributions.html", "ppc_freqpoly_grouped") ``` ```{r ppc_boxplot, echo=FALSE, fig.show='hide'} @@ -181,10 +200,7 @@ ppc_boxplot(y, yrep[1:8, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_boxplot", "PPC-distributions.html", "ppc_boxplot") ``` ```{r ppc_violin_grouped, echo=FALSE, fig.show='hide'} @@ -192,10 +208,7 @@ ppc_violin_grouped(y, yrep, group, size = 1.5) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_violin_grouped", "PPC-distributions.html", "ppc_violin_grouped") ``` ```{r ppc_dens_overlay_grouped, echo=FALSE, fig.show='hide'} @@ -203,10 +216,7 @@ ppc_dens_overlay_grouped(y, yrep[1:25, ], group = group) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_dens_overlay_grouped", "PPC-distributions.html", "ppc_dens_overlay_grouped") ``` ```{r ppc_ecdf_overlay_grouped, echo=FALSE, fig.show='hide'} @@ -214,10 +224,7 @@ ppc_ecdf_overlay_grouped(y, yrep[1:25, ], group = group) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_ecdf_overlay_grouped", "PPC-distributions.html", "ppc_ecdf_overlay_grouped") ``` ```{r ppc_pit_ecdf, echo=FALSE, fig.show='hide'} @@ -225,10 +232,7 @@ ppc_pit_ecdf(y, yrep, prob = 0.99, plot_diff = FALSE) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_pit_ecdf", "PPC-distributions.html", "ppc_pit_ecdf") ``` ```{r results='asis', echo=FALSE} @@ -246,10 +250,7 @@ ppc_stat(y, yrep, stat = "mean") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_stat", "PPC-test-statistics.html", "ppc_stat") ``` ```{r ppc_stat_2d, echo=FALSE, fig.show='hide'} @@ -257,10 +258,7 @@ ppc_stat_2d(y, yrep, stat = c("mean", "sd")) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_stat_2d", "PPC-test-statistics.html", "ppc_stat_2d") ``` ```{r ppc_stat_grouped, echo=FALSE, fig.show='hide'} @@ -268,10 +266,7 @@ ppc_stat_grouped(y, yrep, group = group, stat = "median") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_stat_grouped", "PPC-test-statistics.html", "ppc_stat_grouped") ``` ```{r ppc_stat_freqpoly, echo=FALSE, fig.show='hide'} @@ -279,10 +274,7 @@ ppc_stat_freqpoly(y, yrep, stat = "mean") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_stat_freqpoly", "PPC-test-statistics.html", "ppc_stat_freqpoly") ``` ```{r ppc_stat_freqpoly_grouped, echo=FALSE, fig.show='hide'} @@ -290,10 +282,7 @@ ppc_stat_freqpoly_grouped(y, yrep, group = group, stat = "median") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_stat_freqpoly_grouped", "PPC-test-statistics.html", "ppc_stat_freqpoly_grouped") ``` ```{r results='asis', echo=FALSE} @@ -311,10 +300,7 @@ ppc_intervals(y, yrep, x = x) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_intervals", "PPC-intervals.html", "ppc_intervals") ``` ```{r ppc_ribbon, echo=FALSE, fig.show='hide'} @@ -322,10 +308,7 @@ ppc_ribbon(y, yrep, x = x) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_ribbon", "PPC-intervals.html", "ppc_ribbon") ``` ```{r ppc_intervals_grouped, echo=FALSE, fig.show='hide'} @@ -333,10 +316,7 @@ ppc_intervals_grouped(y, yrep, x = x, group = group) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_intervals_grouped", "PPC-intervals.html", "ppc_intervals_grouped") ``` ```{r ppc_ribbon_grouped, echo=FALSE, fig.show='hide'} @@ -344,10 +324,7 @@ ppc_ribbon_grouped(y, yrep, x = x, group = group) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_ribbon_grouped", "PPC-intervals.html", "ppc_ribbon_grouped") ``` ```{r results='asis', echo=FALSE} @@ -365,10 +342,7 @@ ppc_scatter(y, yrep[1:3, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_scatter", "PPC-scatterplots.html", "ppc_scatter") ``` ```{r ppc_scatter_avg, echo=FALSE, fig.show='hide'} @@ -376,10 +350,7 @@ ppc_scatter_avg(y, yrep) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_scatter_avg", "PPC-scatterplots.html", "ppc_scatter_avg") ``` ```{r ppc_scatter_avg_grouped, echo=FALSE, fig.show='hide'} @@ -387,10 +358,7 @@ ppc_scatter_avg_grouped(y, yrep, group = group) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_scatter_avg_grouped", "PPC-scatterplots.html", "ppc_scatter_avg_grouped") ``` ```{r results='asis', echo=FALSE} @@ -408,10 +376,7 @@ ppc_error_hist(y, yrep[1:3, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_error_hist", "PPC-errors.html", "ppc_error_hist") ``` ```{r ppc_error_hist_grouped, echo=FALSE, fig.show='hide'} @@ -419,10 +384,7 @@ ppc_error_hist_grouped(y, yrep[1:3, ], group = group) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_error_hist_grouped", "PPC-errors.html", "ppc_error_hist_grouped") ``` ```{r ppc_error_scatter, echo=FALSE, fig.show='hide'} @@ -430,10 +392,7 @@ ppc_error_scatter(y, yrep[1:3, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_error_scatter", "PPC-errors.html", "ppc_error_scatter") ``` ```{r ppc_error_scatter_avg, echo=FALSE, fig.show='hide'} @@ -441,10 +400,7 @@ ppc_error_scatter_avg(y, yrep) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_error_scatter_avg", "PPC-errors.html", "ppc_error_scatter_avg") ``` ```{r ppc_error_scatter_avg_vs_x, echo=FALSE, fig.show='hide'} @@ -452,10 +408,7 @@ ppc_error_scatter_avg_vs_x(y, yrep, x = x) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_error_scatter_avg_vs_x", "PPC-errors.html", "ppc_error_scatter_avg_vs_x") ``` ```{r ppc_error_binned, echo=FALSE, fig.show='hide'} @@ -463,10 +416,7 @@ ppc_error_binned(y, yrep[1:3, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_error_binned", "PPC-errors.html", "ppc_error_binned") ``` ```{r results='asis', echo=FALSE} @@ -492,10 +442,7 @@ ppc_bars(y_disc, yrep_disc[1:50, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_bars", "PPC-discrete.html", "ppc_bars") ``` ```{r ppc_bars_grouped, echo=FALSE, fig.show='hide'} @@ -503,10 +450,7 @@ ppc_bars_grouped(y_disc, yrep_disc[1:50, ], group = group_disc) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_bars_grouped", "PPC-discrete.html", "ppc_bars_grouped") ``` ```{r ppc_rootogram, echo=FALSE, fig.show='hide'} @@ -514,10 +458,7 @@ ppc_rootogram(y_disc, yrep_disc) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_rootogram", "PPC-discrete.html", "ppc_rootogram") ``` ```{r results='asis', echo=FALSE} @@ -551,10 +492,7 @@ ppc_loo_pit_overlay(y, yrep, pit = pit_vals) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_loo_pit_overlay", "PPC-loo.html", "ppc_loo_pit_overlay") ``` ```{r ppc_loo_pit_qq, echo=FALSE, fig.show='hide'} @@ -562,10 +500,7 @@ ppc_loo_pit_qq(y, yrep, pit = pit_vals) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_loo_pit_qq", "PPC-loo.html", "ppc_loo_pit_qq") ``` ```{r ppc_loo_intervals, echo=FALSE, fig.show='hide'} @@ -573,10 +508,7 @@ ppc_loo_intervals(y, yrep, intervals = loo_intervals, order = "median") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_loo_intervals", "PPC-loo.html", "ppc_loo_intervals") ``` ```{r ppc_loo_ribbon, echo=FALSE, fig.show='hide'} @@ -584,10 +516,7 @@ ppc_loo_ribbon(y, yrep, intervals = loo_intervals) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppc_loo_ribbon", "PPC-loo.html", "ppc_loo_ribbon") ``` ```{r results='asis', echo=FALSE} @@ -598,14 +527,14 @@ cat('\n') ```{r setup-censoring, echo=FALSE} # Create survival-type data for censoring plots -if (requireNamespace("survival", quietly = TRUE)) { +has_survival <- requireNamespace("survival", quietly = TRUE) +if (has_survival) { set.seed(789) n_cens <- 100 y_cens <- rexp(n_cens, rate = 0.5) status_cens <- rbinom(n_cens, 1, prob = 0.7) y_cens[status_cens == 0] <- runif(sum(status_cens == 0), 0, y_cens[status_cens == 0]) yrep_cens <- matrix(rexp(n_cens * 50, rate = 0.5), nrow = 50) - cens_val <- ifelse(status_cens == 1, y_cens, NA) group_cens <- factor(rep(c("A", "B"), each = n_cens / 2)) } has_survival <- requireNamespace("survival", quietly = TRUE) @@ -620,14 +549,7 @@ ppc_km_overlay(y_cens, yrep_cens, status_y = status_cens) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card_cond("ppc_km_overlay", "PPC-censoring.html", "ppc_km_overlay", has_survival) ``` ```{r ppc_km_overlay_grouped, echo=FALSE, fig.show='hide', eval=has_survival} @@ -635,14 +557,7 @@ ppc_km_overlay_grouped(y_cens, yrep_cens, status_y = status_cens, group = group_ ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card_cond("ppc_km_overlay_grouped", "PPC-censoring.html", "ppc_km_overlay_grouped", has_survival) ``` ```{r results='asis', echo=FALSE} @@ -668,10 +583,7 @@ ppd_hist(yrep[1:5, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_hist", "PPD-distributions.html", "ppd_hist") ``` ```{r ppd_dens_overlay, echo=FALSE, fig.show='hide'} @@ -679,10 +591,7 @@ ppd_dens_overlay(yrep[1:25, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_dens_overlay", "PPD-distributions.html", "ppd_dens_overlay") ``` ```{r ppd_ecdf_overlay, echo=FALSE, fig.show='hide'} @@ -690,10 +599,7 @@ ppd_ecdf_overlay(yrep[1:25, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_ecdf_overlay", "PPD-distributions.html", "ppd_ecdf_overlay") ``` ```{r ppd_dens, echo=FALSE, fig.show='hide'} @@ -701,10 +607,7 @@ ppd_dens(yrep[200:202, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_dens", "PPD-distributions.html", "ppd_dens") ``` ```{r ppd_freqpoly, echo=FALSE, fig.show='hide'} @@ -712,10 +615,7 @@ ppd_freqpoly(yrep[1:3, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_freqpoly", "PPD-distributions.html", "ppd_freqpoly") ``` ```{r ppd_boxplot, echo=FALSE, fig.show='hide'} @@ -723,10 +623,7 @@ ppd_boxplot(yrep[1:8, ]) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_boxplot", "PPD-distributions.html", "ppd_boxplot") ``` ```{r results='asis', echo=FALSE} @@ -744,10 +641,7 @@ ppd_intervals(yrep, x = x) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_intervals", "PPD-intervals.html", "ppd_intervals") ``` ```{r ppd_ribbon, echo=FALSE, fig.show='hide'} @@ -755,10 +649,7 @@ ppd_ribbon(yrep, x = x) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_ribbon", "PPD-intervals.html", "ppd_ribbon") ``` ```{r results='asis', echo=FALSE} @@ -776,10 +667,7 @@ ppd_stat(yrep, stat = "mean") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_stat", "PPD-test-statistics.html", "ppd_stat") ``` ```{r ppd_stat_grouped, echo=FALSE, fig.show='hide'} @@ -787,10 +675,7 @@ ppd_stat_grouped(yrep, group = group, stat = "median") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_stat_grouped", "PPD-test-statistics.html", "ppd_stat_grouped") ``` ```{r ppd_stat_freqpoly, echo=FALSE, fig.show='hide'} @@ -798,10 +683,7 @@ ppd_stat_freqpoly(yrep, stat = "mean") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_stat_freqpoly", "PPD-test-statistics.html", "ppd_stat_freqpoly") ``` ```{r ppd_stat_2d, echo=FALSE, fig.show='hide'} @@ -809,10 +691,7 @@ ppd_stat_2d(yrep, stat = c("mean", "sd")) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("ppd_stat_2d", "PPD-test-statistics.html", "ppd_stat_2d") ``` ```{r results='asis', echo=FALSE} @@ -836,10 +715,7 @@ mcmc_intervals(draws) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_intervals", "MCMC-intervals.html", "mcmc_intervals") ``` ```{r mcmc_areas, echo=FALSE, fig.show='hide'} @@ -847,10 +723,7 @@ mcmc_areas(draws, prob = 0.8) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_areas", "MCMC-intervals.html", "mcmc_areas") ``` ```{r mcmc_areas_ridges, echo=FALSE, fig.show='hide'} @@ -858,10 +731,7 @@ mcmc_areas_ridges(draws) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_areas_ridges", "MCMC-intervals.html", "mcmc_areas_ridges") ``` ```{r results='asis', echo=FALSE} @@ -879,10 +749,7 @@ mcmc_hist(draws) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_hist", "MCMC-distributions.html", "mcmc_hist") ``` ```{r mcmc_hist_by_chain, echo=FALSE, fig.show='hide'} @@ -890,10 +757,7 @@ mcmc_hist_by_chain(draws, pars = "alpha") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_hist_by_chain", "MCMC-distributions.html", "mcmc_hist_by_chain") ``` ```{r mcmc_dens, echo=FALSE, fig.show='hide'} @@ -901,10 +765,7 @@ mcmc_dens(draws) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_dens", "MCMC-distributions.html", "mcmc_dens") ``` ```{r mcmc_dens_overlay, echo=FALSE, fig.show='hide'} @@ -912,10 +773,7 @@ mcmc_dens_overlay(draws, pars = c("alpha", "sigma")) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_dens_overlay", "MCMC-distributions.html", "mcmc_dens_overlay") ``` ```{r mcmc_dens_chains, echo=FALSE, fig.show='hide'} @@ -923,10 +781,7 @@ mcmc_dens_chains(draws, pars = "alpha") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_dens_chains", "MCMC-distributions.html", "mcmc_dens_chains") ``` ```{r mcmc_violin, echo=FALSE, fig.show='hide'} @@ -934,10 +789,7 @@ mcmc_violin(draws) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_violin", "MCMC-distributions.html", "mcmc_violin") ``` ```{r results='asis', echo=FALSE} @@ -956,10 +808,7 @@ mcmc_trace(draws, pars = c("alpha", "sigma")) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_trace", "MCMC-traces.html", "mcmc_trace") ``` ```{r mcmc_trace_highlight, echo=FALSE, fig.show='hide'} @@ -967,10 +816,7 @@ mcmc_trace_highlight(draws, pars = "alpha", highlight = 1) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_trace_highlight", "MCMC-traces.html", "mcmc_trace_highlight") ``` ```{r mcmc_rank_overlay, echo=FALSE, fig.show='hide'} @@ -979,10 +825,7 @@ mcmc_rank_overlay(draws, pars = "alpha") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_rank_overlay", "MCMC-traces.html", "mcmc_rank_overlay") ``` ```{r mcmc_rank_hist, echo=FALSE, fig.show='hide'} @@ -990,10 +833,7 @@ mcmc_rank_hist(draws, pars = "alpha") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_rank_hist", "MCMC-traces.html", "mcmc_rank_hist") ``` ```{r mcmc_rank_ecdf, echo=FALSE, fig.show='hide'} @@ -1001,10 +841,7 @@ mcmc_rank_ecdf(draws, pars = "alpha") ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_rank_ecdf", "MCMC-traces.html", "mcmc_rank_ecdf") ``` ```{r results='asis', echo=FALSE} @@ -1023,10 +860,7 @@ mcmc_scatter(draws, pars = c("alpha", "sigma")) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_scatter", "MCMC-scatterplots.html", "mcmc_scatter") ``` ```{r mcmc_hex, echo=FALSE, fig.show='hide'} @@ -1034,10 +868,7 @@ mcmc_hex(draws, pars = c("alpha", "sigma")) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_hex", "MCMC-scatterplots.html", "mcmc_hex") ``` ```{r mcmc_pairs, echo=FALSE, fig.show='hide'} @@ -1045,10 +876,7 @@ mcmc_pairs(draws, pars = c("alpha", "sigma", "beta[1]")) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_pairs", "MCMC-scatterplots.html", "mcmc_pairs") ``` ```{r results='asis', echo=FALSE} @@ -1075,10 +903,7 @@ mcmc_rhat(rhat_vals) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_rhat", "MCMC-diagnostics.html", "mcmc_rhat") ``` ```{r mcmc_rhat_hist, echo=FALSE, fig.show='hide'} @@ -1086,10 +911,7 @@ mcmc_rhat_hist(rhat_vals) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_rhat_hist", "MCMC-diagnostics.html", "mcmc_rhat_hist") ``` ```{r mcmc_neff, echo=FALSE, fig.show='hide'} @@ -1097,10 +919,7 @@ mcmc_neff(neff_vals) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_neff", "MCMC-diagnostics.html", "mcmc_neff") ``` ```{r mcmc_neff_hist, echo=FALSE, fig.show='hide'} @@ -1108,10 +927,7 @@ mcmc_neff_hist(neff_vals) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_neff_hist", "MCMC-diagnostics.html", "mcmc_neff_hist") ``` ```{r mcmc_acf, echo=FALSE, fig.show='hide'} @@ -1119,10 +935,7 @@ mcmc_acf(draws, pars = c("alpha", "sigma")) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_acf", "MCMC-diagnostics.html", "mcmc_acf") ``` ```{r mcmc_acf_bar, echo=FALSE, fig.show='hide'} @@ -1130,10 +943,7 @@ mcmc_acf_bar(draws, pars = c("alpha", "sigma")) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_acf_bar", "MCMC-diagnostics.html", "mcmc_acf_bar") ``` ```{r results='asis', echo=FALSE} @@ -1151,10 +961,7 @@ mcmc_parcoord(draws, pars = c("alpha", "sigma", "beta[1]", "beta[2]")) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_parcoord", "MCMC-parcoord.html", "mcmc_parcoord") ``` ```{r results='asis', echo=FALSE} @@ -1178,10 +985,7 @@ mcmc_recover_intervals(draws, true = true_vals) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_recover_intervals", "MCMC-recover.html", "mcmc_recover_intervals") ``` ```{r mcmc_recover_scatter, echo=FALSE, fig.show='hide'} @@ -1189,10 +993,7 @@ mcmc_recover_scatter(draws, true = true_vals) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_recover_scatter", "MCMC-recover.html", "mcmc_recover_scatter") ``` ```{r mcmc_recover_hist, echo=FALSE, fig.show='hide'} @@ -1200,10 +1001,7 @@ mcmc_recover_hist(draws, true = true_vals) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_recover_hist", "MCMC-recover.html", "mcmc_recover_hist") ``` ```{r results='asis', echo=FALSE} @@ -1221,10 +1019,7 @@ mcmc_combo(draws, pars = c("alpha", "sigma")) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_combo", "MCMC-combos.html", "mcmc_combo") ``` ```{r results='asis', echo=FALSE} @@ -1274,10 +1069,7 @@ mcmc_nuts_divergence(np_data, lp_data) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_nuts_divergence", "MCMC-nuts.html", "mcmc_nuts_divergence") ``` ```{r mcmc_nuts_energy, echo=FALSE, fig.show='hide'} @@ -1285,10 +1077,7 @@ mcmc_nuts_energy(np_data) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_nuts_energy", "MCMC-nuts.html", "mcmc_nuts_energy") ``` ```{r mcmc_nuts_acceptance, echo=FALSE, fig.show='hide'} @@ -1296,10 +1085,7 @@ mcmc_nuts_acceptance(np_data, lp_data) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_nuts_acceptance", "MCMC-nuts.html", "mcmc_nuts_acceptance") ``` ```{r mcmc_nuts_treedepth, echo=FALSE, fig.show='hide'} @@ -1307,10 +1093,7 @@ mcmc_nuts_treedepth(np_data, lp_data) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_nuts_treedepth", "MCMC-nuts.html", "mcmc_nuts_treedepth") ``` ```{r mcmc_nuts_stepsize, echo=FALSE, fig.show='hide'} @@ -1318,10 +1101,7 @@ mcmc_nuts_stepsize(np_data, lp_data) ``` ```{r results='asis', echo=FALSE} -cat('\n') +gallery_card("mcmc_nuts_stepsize", "MCMC-nuts.html", "mcmc_nuts_stepsize") ``` ```{r results='asis', echo=FALSE} From 0c3b539c523d01c0828aeb7a9a4bae6a95f403fd Mon Sep 17 00:00:00 2001 From: Utkarsh Date: Tue, 10 Mar 2026 18:59:39 +0530 Subject: [PATCH 3/3] Fix #431: Replace deprecated dplyr/tidyselect functions --- NAMESPACE | 3 +-- NEWS.md | 1 + R/mcmc-intervals.R | 25 +++++++++++-------------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index b8cf818b..101a6ccd 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -217,12 +217,11 @@ importFrom(dplyr,inner_join) importFrom(dplyr,left_join) importFrom(dplyr,mutate) importFrom(dplyr,n) -importFrom(dplyr,one_of) importFrom(dplyr,pull) importFrom(dplyr,rename) importFrom(dplyr,select) +importFrom(dplyr,slice_min) importFrom(dplyr,summarise) -importFrom(dplyr,top_n) importFrom(dplyr,ungroup) importFrom(dplyr,vars) importFrom(ggplot2,"%+replace%") diff --git a/NEWS.md b/NEWS.md index 6f538289..89e581bd 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,6 @@ # bayesplot (development version) +* Replaced deprecated `dplyr` and `tidyselect` functions (`top_n`, `one_of`, `group_indices`) with their modern equivalents to ensure future compatibility. (#431) * New "Example Gallery" vignette providing a visual overview of all plotting functions with thumbnail example plots, organized by category (PPC, PPD, MCMC, HMC/NUTS). (#437) diff --git a/R/mcmc-intervals.R b/R/mcmc-intervals.R index 13687846..200ac111 100644 --- a/R/mcmc-intervals.R +++ b/R/mcmc-intervals.R @@ -640,7 +640,7 @@ mcmc_intervals_data <- function(x, rhat_tbl <- rhat %>% mcmc_rhat_data() %>% - select(one_of("parameter"), + select(all_of("parameter"), rhat_value = "value", rhat_rating = "rating", rhat_description = "description") %>% @@ -656,7 +656,7 @@ mcmc_intervals_data <- function(x, # Don't import `filter`: otherwise, you get a warning when using # `devtools::load_all(".")` because stats also has a `filter` function -#' @importFrom dplyr inner_join one_of top_n +#' @importFrom dplyr inner_join all_of slice_min #' @rdname MCMC-intervals #' @export mcmc_areas_data <- function(x, @@ -729,14 +729,14 @@ mcmc_areas_data <- function(x, # Find the density values closest to the point estimate point_ests <- intervals %>% - select(one_of("parameter", "m")) + select(all_of(c("parameter", "m"))) point_centers <- data_inner %>% inner_join(point_ests, by = "parameter") %>% group_by(.data$parameter) %>% mutate(diff = abs(.data$m - .data$x)) %>% - dplyr::top_n(1, -.data$diff) %>% - select(one_of("parameter", "x", "m")) %>% + dplyr::slice_min(.data$diff, n = 1) %>% + select(all_of(c("parameter", "x", "m"))) %>% rename(center = "x") %>% ungroup() @@ -758,15 +758,15 @@ mcmc_areas_data <- function(x, } data <- dplyr::bind_rows(data_inner, data_outer, points) %>% - select(one_of("parameter", "interval", "interval_width", - "x", "density", "scaled_density")) %>% + select(all_of(c("parameter", "interval", "interval_width", + "x", "density", "scaled_density"))) %>% # Density scaled so the highest in entire dataframe has height 1 mutate(plotting_density = .data$density / max(.data$density)) if (rlang::has_name(intervals, "rhat_value")) { rhat_info <- intervals %>% - select(one_of("parameter", "rhat_value", - "rhat_rating", "rhat_description")) + select(all_of(c("parameter", "rhat_value", + "rhat_rating", "rhat_description"))) data <- inner_join(data, rhat_info, by = "parameter") } data @@ -817,18 +817,15 @@ compute_column_density <- function(df, group_vars, value_var, ...) { syms() # Tuck away the subgroups to compute densities on into nested dataframes - sub_df <- dplyr::select(df, !!! group_cols, !! value_var) - group_df <- df %>% dplyr::select(!!! group_cols, !! value_var) %>% group_by(!!! group_cols) by_group <- group_df %>% - split(dplyr::group_indices(group_df)) %>% + dplyr::group_split() %>% lapply(pull, !! value_var) - nested <- df %>% - dplyr::distinct(!!! group_cols) %>% + nested <- dplyr::group_keys(group_df) %>% mutate(data = by_group) nested$density <- lapply(nested$data, compute_interval_density, ...)