From 8a51d1a2d178f94efd4f079309487b7ae9ac3c6f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 25 Dec 2025 08:21:09 +0000 Subject: [PATCH 1/3] feat(pygal): implement raincloud-basic --- .../raincloud-basic/implementations/pygal.py | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/plots/raincloud-basic/implementations/pygal.py b/plots/raincloud-basic/implementations/pygal.py index 1b94aa3083..899dc0c50a 100644 --- a/plots/raincloud-basic/implementations/pygal.py +++ b/plots/raincloud-basic/implementations/pygal.py @@ -1,7 +1,7 @@ -""" pyplots.ai +"""pyplots.ai raincloud-basic: Basic Raincloud Plot -Library: pygal 3.1.0 | Python 3.13.11 -Quality: 78/100 | Created: 2025-12-25 +Library: pygal | Python 3.13 +Quality: pending | Created: 2025-12-25 """ import numpy as np @@ -26,13 +26,14 @@ group_colors = ["#306998", "#FFD43B", "#4CAF50"] # Custom style for 4800x2700 px canvas - scaled up for visibility +# Using very subtle grid lines (low alpha via lighter color) custom_style = Style( background="white", plot_background="white", foreground="#333333", foreground_strong="#333333", foreground_subtle="#999999", - guide_stroke_color="#cccccc", + guide_stroke_color="#e8e8e8", # Very light guide lines for subtle grid colors=tuple(group_colors * 3) + ("#222222",) * 30, title_font_size=96, label_font_size=60, @@ -55,6 +56,8 @@ x_title="Treatment Group", y_title="Reaction Time (ms)", show_legend=False, + legend_at_bottom=False, + legend_box_size=0, stroke=True, fill=True, dots_size=0, @@ -124,13 +127,13 @@ whisker_high = float(min(values.max(), q3 + 1.5 * iqr)) box_data.append((center_x, median, q1, q3, whisker_low, whisker_high, group_colors[i])) -# Add clouds (half-violins) - no labels since y-axis labels already show groups +# Add clouds (half-violins) - using empty string for label to suppress legend for _category, cloud_points, _color in cloud_data: - chart.add(None, cloud_points, stroke=True, fill=True) + chart.add("", cloud_points, stroke=True, fill=True) -# Add rain points - increased dots_size for visibility on 4800x2700 canvas +# Add rain points - increased dots_size for better visibility on 4800x2700 canvas for _category, rain_points, _color in rain_data: - chart.add(None, rain_points, stroke=False, fill=False, dots_size=24) + chart.add("", rain_points, stroke=False, fill=False, dots_size=32) # Add box plots - vertical boxes centered at each group # Significantly increased line weights for 4800x2700 canvas @@ -146,23 +149,23 @@ (center_x + box_width, q1), (center_x - box_width, q1), ] - chart.add(None, quartile_box, stroke=True, fill=False, show_dots=False, stroke_style={"width": 20}) + chart.add("", quartile_box, stroke=True, fill=False, show_dots=False, stroke_style={"width": 20}) # Median line (horizontal line within box) - thickest for emphasis median_line = [(center_x - box_width * 1.3, median), (center_x + box_width * 1.3, median)] - chart.add(None, median_line, stroke=True, fill=False, show_dots=False, stroke_style={"width": 28}) + chart.add("", median_line, stroke=True, fill=False, show_dots=False, stroke_style={"width": 28}) # Whiskers (vertical lines from box to caps) whisker_bottom = [(center_x, whisker_low), (center_x, q1)] whisker_top = [(center_x, q3), (center_x, whisker_high)] - chart.add(None, whisker_bottom, stroke=True, fill=False, show_dots=False, stroke_style={"width": 14}) - chart.add(None, whisker_top, stroke=True, fill=False, show_dots=False, stroke_style={"width": 14}) + chart.add("", whisker_bottom, stroke=True, fill=False, show_dots=False, stroke_style={"width": 14}) + chart.add("", whisker_top, stroke=True, fill=False, show_dots=False, stroke_style={"width": 14}) # Whisker caps (horizontal lines at ends) cap_bottom = [(center_x - cap_width, whisker_low), (center_x + cap_width, whisker_low)] cap_top = [(center_x - cap_width, whisker_high), (center_x + cap_width, whisker_high)] - chart.add(None, cap_bottom, stroke=True, fill=False, show_dots=False, stroke_style={"width": 14}) - chart.add(None, cap_top, stroke=True, fill=False, show_dots=False, stroke_style={"width": 14}) + chart.add("", cap_bottom, stroke=True, fill=False, show_dots=False, stroke_style={"width": 14}) + chart.add("", cap_top, stroke=True, fill=False, show_dots=False, stroke_style={"width": 14}) # X-axis labels for treatment groups chart.x_labels = [ From 6f908169d2c72106773cdd95a2f81b47679531a2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 25 Dec 2025 08:21:24 +0000 Subject: [PATCH 2/3] chore(pygal): add metadata for raincloud-basic --- plots/raincloud-basic/metadata/pygal.yaml | 27 ++++++++--------------- 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/plots/raincloud-basic/metadata/pygal.yaml b/plots/raincloud-basic/metadata/pygal.yaml index c89ee9b107..79a4239307 100644 --- a/plots/raincloud-basic/metadata/pygal.yaml +++ b/plots/raincloud-basic/metadata/pygal.yaml @@ -1,28 +1,19 @@ +# Per-library metadata for pygal implementation of raincloud-basic +# Auto-generated by impl-generate.yml + library: pygal specification_id: raincloud-basic -created: '2025-12-25T07:14:50Z' -updated: '2025-12-25T07:36:01Z' +created: '2025-12-25T08:21:24Z' +updated: '2025-12-25T08:21:24Z' generated_by: claude-opus-4-5-20251101 -workflow_run: 20500987018 +workflow_run: 20501866165 issue: 0 python_version: 3.13.11 library_version: 3.1.0 preview_url: https://storage.googleapis.com/pyplots-images/plots/raincloud-basic/pygal/plot.png preview_thumb: https://storage.googleapis.com/pyplots-images/plots/raincloud-basic/pygal/plot_thumb.png preview_html: https://storage.googleapis.com/pyplots-images/plots/raincloud-basic/pygal/plot.html -quality_score: 78 +quality_score: null review: - strengths: - - Correct raincloud layout with cloud on right, boxplot centered, rain on left (vertical - orientation per spec) - - Excellent use of pygal XY chart to build complex composite visualization from - scratch - - Colorblind-safe palette with good contrast between groups - - Realistic clinical trial reaction time scenario - - Manual KDE implementation with proper Silverman bandwidth - - Proper box plot components including whisker caps - weaknesses: - - Legend displays despite show_legend=False setting - use chart configuration to - fully suppress - - Rain dots could be slightly larger for better visibility at 4800x2700 resolution - - Grid lines are present but could be more subtle (lower alpha) + strengths: [] + weaknesses: [] From 25e839ecfe52f4f684cf1e33a4dfdd2dddab5549 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 25 Dec 2025 08:23:33 +0000 Subject: [PATCH 3/3] chore(pygal): update quality score 91 and review feedback for raincloud-basic --- .../raincloud-basic/implementations/pygal.py | 6 +++--- plots/raincloud-basic/metadata/pygal.yaml | 19 ++++++++++++------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/plots/raincloud-basic/implementations/pygal.py b/plots/raincloud-basic/implementations/pygal.py index 899dc0c50a..0f6bea878b 100644 --- a/plots/raincloud-basic/implementations/pygal.py +++ b/plots/raincloud-basic/implementations/pygal.py @@ -1,7 +1,7 @@ -"""pyplots.ai +""" pyplots.ai raincloud-basic: Basic Raincloud Plot -Library: pygal | Python 3.13 -Quality: pending | Created: 2025-12-25 +Library: pygal 3.1.0 | Python 3.13.11 +Quality: 91/100 | Created: 2025-12-25 """ import numpy as np diff --git a/plots/raincloud-basic/metadata/pygal.yaml b/plots/raincloud-basic/metadata/pygal.yaml index 79a4239307..a7d092ec7f 100644 --- a/plots/raincloud-basic/metadata/pygal.yaml +++ b/plots/raincloud-basic/metadata/pygal.yaml @@ -1,10 +1,7 @@ -# Per-library metadata for pygal implementation of raincloud-basic -# Auto-generated by impl-generate.yml - library: pygal specification_id: raincloud-basic created: '2025-12-25T08:21:24Z' -updated: '2025-12-25T08:21:24Z' +updated: '2025-12-25T08:23:33Z' generated_by: claude-opus-4-5-20251101 workflow_run: 20501866165 issue: 0 @@ -13,7 +10,15 @@ library_version: 3.1.0 preview_url: https://storage.googleapis.com/pyplots-images/plots/raincloud-basic/pygal/plot.png preview_thumb: https://storage.googleapis.com/pyplots-images/plots/raincloud-basic/pygal/plot_thumb.png preview_html: https://storage.googleapis.com/pyplots-images/plots/raincloud-basic/pygal/plot.html -quality_score: null +quality_score: 91 review: - strengths: [] - weaknesses: [] + strengths: + - Excellent manual implementation of raincloud plot using pygal XY chart primitives + - Clean KDE computation using Silverman rule for bandwidth estimation + - Correct vertical raincloud layout with cloud on right, rain on left as per spec + - Well-scaled font sizes for the 4800x2700 canvas + - Colorblind-safe color palette + - Realistic reaction time data with appropriate outliers showing distribution differences + weaknesses: + - Box plot elements could be slightly thicker/more visible relative to the half-violin + - No interactive tooltips leveraging pygal SVG interactivity capabilities