@@ -304,17 +304,24 @@ mcmc_rank_overlay <- function(x,
304304 mutate(cut = cut(.data $ value_rank , n_bins )) %> %
305305 group_by(.data $ cut ) %> %
306306 mutate(bin_start = min(.data $ value_rank )) %> %
307- ungroup() %> %
308- select(- c(" cut" ))
307+ ungroup()
309308
309+ # Count how many values fall into each bin per chain & parameter
310310 d_bin_counts <- data %> %
311311 left_join(histobins , by = " value_rank" ) %> %
312312 count(.data $ parameter , .data $ chain , .data $ bin_start )
313313
314+ # Now ensure that all combinations of parameter, chain, and bin_start exist
315+ # even if no counts are present (https://github.com/stan-dev/bayesplot/issues/331)
316+ all_params_chains <- dplyr :: distinct(data , .data $ parameter , .data $ chain )
317+ all_bins <- dplyr :: distinct(histobins , .data $ bin_start , .data $ cut )
318+ combos <- dplyr :: cross_join(all_params_chains , all_bins )
319+ d_bin_counts <- full_join(combos , d_bin_counts , by = c(" parameter" , " chain" , " bin_start" )) %> %
320+ mutate(n = dplyr :: coalesce(n , 0L ))
321+
314322 # Duplicate the final bin, setting the left edge to the greatest x value, so
315323 # that the entire x-axis is used,
316324 right_edge <- max(data $ value_rank )
317-
318325 d_bin_counts <- d_bin_counts %> %
319326 dplyr :: filter(.data $ bin_start == max(.data $ bin_start )) %> %
320327 mutate(bin_start = right_edge ) %> %
0 commit comments