@@ -304,17 +304,28 @@ 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_combos <- dplyr :: as_tibble(expand.grid(
317+ parameter = unique(data $ parameter ),
318+ chain = unique(data $ chain ),
319+ bin_start = unique(histobins $ bin_start ),
320+ stringsAsFactors = FALSE
321+ ))
322+ d_bin_counts <- all_combos %> %
323+ left_join(d_bin_counts , by = c(" parameter" , " chain" , " bin_start" )) %> %
324+ mutate(n = dplyr :: if_else(is.na(n ), 0L , n ))
325+
314326 # Duplicate the final bin, setting the left edge to the greatest x value, so
315327 # that the entire x-axis is used,
316328 right_edge <- max(data $ value_rank )
317-
318329 d_bin_counts <- d_bin_counts %> %
319330 dplyr :: filter(.data $ bin_start == max(.data $ bin_start )) %> %
320331 mutate(bin_start = right_edge ) %> %
0 commit comments