From 33677fbadf9972330d10dba596773585329d203a Mon Sep 17 00:00:00 2001 From: mrq Date: Sat, 14 Feb 2026 22:18:20 +0000 Subject: [PATCH] 2.141 --- .../images/ratings[total][type=pie].png | Bin 0 -> 30752 bytes chart.py | 57 +++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100755 archive/2026/ESAW2026/images/ratings[total][type=pie].png diff --git a/archive/2026/ESAW2026/images/ratings[total][type=pie].png b/archive/2026/ESAW2026/images/ratings[total][type=pie].png new file mode 100755 index 0000000000000000000000000000000000000000..1c4615f95d17d633ec9c551ba8a44b91c3bdc288 GIT binary patch literal 30752 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 literal 0 HcmV?d00001 diff --git a/chart.py b/chart.py index 54ecf02..74adc3f 100755 --- a/chart.py +++ b/chart.py @@ -16,7 +16,7 @@ import matplotlib.pyplot as Plot import matplotlib.patches as patches # consts -TITLE = "AGDQ 2026" +TITLE = "ESA Winter 2026" USE_LEGEND = False # display the legend with markers TITLE_OFFSET = 0 # 2.5 # to-do: dynamically set this to how many columns are set with legend @@ -748,6 +748,53 @@ def plot_sub_bars(sub, stats): sub.tick_params(axis="y", left=False, labelleft=False) sub.tick_params(axis="x", bottom=True, top=True, labelbottom=True, labeltop=True) +def plot_sub_pie(sub, stats): + total_buckets = [0] * 10 + for stat in stats: + if stat is None: continue + for i in range(len(stat['buckets'])): + total_buckets[i] += stat['buckets'][i] + + bucket_config = [ + (4, "F", "#73172d"), + (5, "D", "#df3e23"), + (6, "C", "#f9a31b"), + (7, "B", "#fffc40"), + (8, "A", "#9cdb43"), + (9, "S", "#20d6c7"), + ] + + labels = [] + sizes = [] + colors = [] + + for i, label, color in bucket_config: + if total_buckets[i] > 0: + labels.append(label) + sizes.append(total_buckets[i]) + colors.append(color) + + if not sizes: + sub.text(0.5, 0.5, "No Data", ha="center", va="center") + return + + wedges, texts, autotexts = sub.pie( + sizes, + labels=labels, + colors=colors, + autopct='%1.1f%%', + startangle=140, + radius=2, + pctdistance=0.75, + textprops={'color': COLORS["TEXT"]} + ) + + for autotext in autotexts: + autotext.set_color('black') + autotext.set_weight('bold') + + sub.set_aspect('equal') + def create_plot( stats ): # determine dimensions cols = max(MIN_COLUMNS, min(5, round(math.sqrt(len(stats) / 6)))) @@ -759,7 +806,11 @@ def create_plot( stats ): subs = [subs] # set main figure stuff - figSize = (cols * COL_WIDTH + 1, rows * ROW_HEIGHT + 1.5) + if MODE == "pie": + figSize = (cols * COL_WIDTH + 1, rows * 4 + 1.5) + else: + figSize = (cols * COL_WIDTH + 1, rows * ROW_HEIGHT + 1.5) + fig.set_size_inches(figSize) fig.set_tight_layout(True) @@ -823,6 +874,8 @@ def create_plot( stats ): plot_sub_bars(sub, stats_sub) elif MODE == "boxplot": plot_sub_boxplot(sub, stats_sub) + elif MODE == "pie": + plot_sub_pie(sub, stats_sub) # Stats related def compute_mean_smart(ratings):