From 59531c5323ef39ec24c6d32be5b8ff504ef13ffa Mon Sep 17 00:00:00 2001 From: Kevin Phan <98072684+ph-kev@users.noreply.github.com> Date: Fri, 14 Feb 2025 12:19:09 -0800 Subject: [PATCH] Make leaderboard automatically reorder categories --- ext/ClimaAnalysisMakieExt.jl | 14 ++++++++++---- test/test_MakieExt.jl | 7 ++++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/ext/ClimaAnalysisMakieExt.jl b/ext/ClimaAnalysisMakieExt.jl index c8340597..69d32d38 100644 --- a/ext/ClimaAnalysisMakieExt.jl +++ b/ext/ClimaAnalysisMakieExt.jl @@ -804,14 +804,20 @@ function Visualize.plot_leaderboard!( model_names = ["CliMA"], best_category_name = "ANN", ) - # Check if rmse_model_vars all have the same categories - categories_names = ClimaAnalysis.category_names.(rmse_vars) + # Check if rmse_model_vars all have the same categories (order does not matter) + categories_names = Set.(ClimaAnalysis.category_names.(rmse_vars)) categories_same = length(unique(categories_names)) == 1 categories_same || error("Categories are not all the same across the RMSEVariable") - rmse_var = first(rmse_vars) - categ_names = ClimaAnalysis.category_names(rmse_var) + # Reorder categories since the order can be different + first_rmse_var = first(rmse_vars) + rmse_vars = collect( + ClimaAnalysis.match_category_order(rmse_var, first_rmse_var) for + rmse_var in rmse_vars + ) + + categ_names = ClimaAnalysis.category_names(first_rmse_var) num_variables = length(rmse_vars) num_boxes = length(categ_names) # number of categories num_models = 1 + length(model_names) # best model plus the other models in model_names diff --git a/test/test_MakieExt.jl b/test/test_MakieExt.jl index a5520b60..a4e9af63 100644 --- a/test/test_MakieExt.jl +++ b/test/test_MakieExt.jl @@ -286,6 +286,11 @@ using OrderedCollections "CliMA" => "units", ), ) + # Test that reordering will not result in an error in plot_leaderboard! + rmse_var2_reordered = ClimaAnalysis.Leaderboard.reorder_categories( + rmse_var2, + ["ANN", "MAM", "JJA", "SON", "DJF"], + ) # Normalized RMSEs should improve going from ta to ta1 to ta2 for CliMA model @@ -297,7 +302,7 @@ using OrderedCollections fig, rmse_var, rmse_var1, - rmse_var2, + rmse_var2_reordered, best_category_name = "ANN", ) output_name = joinpath(tmp_dir, "test_leaderboard.png")