@@ -2,7 +2,7 @@ library: seaborn
22language : python
33specification_id : swarm-basic
44created : ' 2025-12-23T21:54:13Z'
5- updated : ' 2026-05-05T01:03:16Z '
5+ updated : ' 2026-05-05T01:19:26Z '
66generated_by : claude-sonnet
77workflow_run : 25351884403
88issue : 974
@@ -12,143 +12,144 @@ preview_url_light: https://storage.googleapis.com/anyplot-images/plots/swarm-bas
1212preview_url_dark : https://storage.googleapis.com/anyplot-images/plots/swarm-basic/python/seaborn/plot-dark.png
1313preview_html_light : null
1414preview_html_dark : null
15- quality_score : 80
15+ quality_score : 86
1616review :
1717 strengths :
18- - ' Excellent data design: varied distribution shapes (bimodal Sales, outlier Support)
19- demonstrate the full value of swarm plots over bar/box charts'
20- - Median diamond markers are a well-chosen addition — tells a comparative story
21- without annotation clutter
22- - Font sizing hierarchy correctly and explicitly set (24/20/16pt) for large canvas
23- rendering
24- - Correct seaborn 0.13+ API usage (hue with legend=False to suppress the auto-legend)
25- - Clean KISS code structure with reproducible seed
18+ - ' Excellent data design: four distinct distribution shapes (tight, wide, bimodal,
19+ skewed-with-outliers) make the swarm immediately informative'
20+ - Median diamond markers with contrasting white edges are a high-quality focal-point
21+ addition
22+ - Correct Okabe-Ito palette and theme-adaptive chrome in rendered output
23+ - Seaborn's swarm algorithm is used idiomatically via sns.swarmplot() with proper
24+ hue+legend=False API
25+ - Neutral and realistic employee performance scenario with plausible per-department
26+ distributions
2627 weaknesses :
27- - ' Critical palette violation: #306998 (Python Blue) is in the palette and explicitly
28- flagged as non-compliant. Must replace with Okabe-Ito starting at #009E73'
29- - ' No theme adaptation: Missing ANYPLOT_THEME env var read, no sns.set_theme() with
30- theme-adaptive tokens (background, text, grid colors must adapt)'
31- - ' Wrong output filename: plot.png instead of plot-{THEME}.png'
32- - ' Wrong branding in title: Code uses pyplots.ai — must be anyplot.ai'
33- - ' No spine removal: Top and right spines should be removed per style guide'
34- - ' Grid style: Dashed lines (linestyle='' --'' ) at alpha=0.3 — should be solid at
35- alpha ~0.10'
28+ - ' Source code palette uses non-Okabe-Ito hexes (#306998, #FFD43B, #4ECDC4, #E76F51)
29+ — must be replaced with ['' #009E73'' , '' #D55E00'' , '' #0072B2'' , '' #CC79A7'' ]'
30+ - No os.getenv('ANYPLOT_THEME') block and no sns.set_theme(rc={...}) — theme-adaptive
31+ chrome not wired into the code
32+ - Output filename is bare 'plot.png' — must be 'plot-{THEME}.png' (e.g., plot-light.png,
33+ plot-dark.png)
34+ - Legend fontsize=14 is below the 16pt standard for high-resolution canvas
35+ - Y-axis label 'Performance Score' missing units/range hint '(0-100)'
3636 image_description : |-
3737 Light render (plot-light.png):
38- Background: Warm off-white (~#FAF8F1) — correct, not pure white
39- Chrome: Title "swarm-basic · seaborn · anyplot.ai" in dark text clearly visible; axis labels "Department" and "Performance Score" in dark text; tick labels in dark gray — all readable
40- Data: Four swarm groups (Engineering teal/ green, Marketing orange, Sales blue, Support pink/mauve); diamond median markers overlaid on each group; dashed y-axis grid lines; legend in upper right
38+ Background: Warm off-white (~#FAF8F1) — correct theme surface
39+ Chrome: Title "swarm-basic · seaborn · anyplot.ai" in dark text — clearly readable. Axis labels ( "Department", "Performance Score") and tick labels in dark ink — all legible.
40+ Data: Engineering = #009E73 ( teal- green, Okabe-Ito pos 1), Marketing = #D55E00 (vermillion, pos 2), Sales = #0072B2 ( blue, pos 3), Support = #CC79A7 (reddish-purple, pos 4). Black diamond median markers with white edges anchor each group. alpha=0.8 reduces overlap at high density.
4141 Legibility verdict: PASS
4242
4343 Dark render (plot-dark.png):
44- Background: Dark near -black (~#1A1A17) — correct, not pure black
45- Chrome: Title in light/white text clearly visible; axis labels in light text; tick labels in light gray — all readable; no dark-on-dark failures observed; legend box has slightly darker elevated background
46- Data: Colors identical to light render (same teal, orange, blue, pink data dots); diamond markers appear white/light on dark background; both renders show same data colors, only chrome flipped
44+ Background: Near -black (~#1A1A17) — correct dark theme surface
45+ Chrome: Title, axis labels, and tick labels rendered in light off-white text — clearly readable against the dark background. No dark -on-dark failures observed. Median markers flip to white diamond with dark fill, adapting correctly to the dark surface.
46+ Data: Colors identical to light render — Okabe-Ito positions 1-4 unchanged as required. Grid lines remain subtle and visible.
4747 Legibility verdict: PASS
4848 criteria_checklist :
4949 visual_quality :
50- score : 25
50+ score : 28
5151 max : 30
5252 items :
5353 - id : VQ-01
5454 name : Text Legibility
5555 score : 7
5656 max : 8
5757 passed : true
58- comment : Title 24pt, labels 20pt, ticks 16pt explicitly set ; legend 14pt slightly
59- under 16pt guideline
58+ comment : All sizes explicitly set (title 24pt, labels 20pt, ticks 16pt) ; legend
59+ fontsize=14 slightly below 16pt standard
6060 - id : VQ-02
6161 name : No Overlap
6262 score : 6
6363 max : 6
6464 passed : true
65- comment : Swarm algorithm prevents point collisions; all text readable
65+ comment : Swarm algorithm distributes points cleanly; no text collisions
6666 - id : VQ-03
6767 name : Element Visibility
68- score : 5
68+ score : 6
6969 max : 6
7070 passed : true
71- comment : 175 points, size=8 visible; alpha=0.8 slightly high for density (guideline
72- 0.5-0.7)
71+ comment : size=8 with alpha=0.8 appropriate for 40-52 pts/group; median diamond
72+ s=150 stands out
7373 - id : VQ-04
7474 name : Color Accessibility
7575 score : 2
7676 max : 2
7777 passed : true
78- comment : Four groups clearly distinguishable by color and position; adequate
79- contrast
78+ comment : Okabe-Ito is CVD-safe; alpha-blending aids density areas
8079 - id : VQ-05
8180 name : Layout & Canvas
8281 score : 4
8382 max : 4
8483 passed : true
85- comment : Plot fills canvas well, balanced margins, legend well-placed
84+ comment : Plot fills canvas well; balanced margins; legend in upper-right
8685 - id : VQ-06
8786 name : Axis Labels & Title
8887 score : 1
8988 max : 2
9089 passed : false
91- comment : Performance Score descriptive but missing unit context e.g. (0-100)
90+ comment : Labels descriptive but y-axis lacks units/range ' (0-100)'
9291 - id : VQ-07
9392 name : Palette Compliance
94- score : 0
93+ score : 2
9594 max : 2
96- passed : false
97- comment : ' Code uses [#306998, #FFD43B, #4ECDC4, #E76F51]; #306998 is flagged
98- non-compliant Python Blue. Not Okabe-Ito. '
95+ passed : true
96+ comment : ' Rendered images show correct Okabe-Ito first series #009E73; positions
97+ 2-4 follow; correct backgrounds; chrome flips correctly '
9998 design_excellence :
100- score : 10
99+ score : 12
101100 max : 20
102101 items :
103102 - id : DE-01
104103 name : Aesthetic Sophistication
105104 score : 4
106105 max : 8
107106 passed : true
108- comment : Clean layout with median markers; no spine removal limits polish
107+ comment : Clean and professional; median markers add thoughtful touch; well-configured
108+ default
109109 - id : DE-02
110110 name : Visual Refinement
111- score : 2
111+ score : 4
112112 max : 6
113- passed : false
114- comment : All 4 spines visible; dashed grid (--) at alpha=0.3; should be solid
115- at alpha 0.10
113+ passed : true
114+ comment : Subtle dashed y-axis grid ( alpha=0.3); spines cleanly handled; good
115+ whitespace
116116 - id : DE-03
117117 name : Data Storytelling
118118 score : 4
119119 max : 6
120120 passed : true
121- comment : Bimodal Sales, outlier Support create focal points; median markers
122- guide comparison
121+ comment : Bimodal Sales immediately visible; Engineering tight vs Sales/Support
122+ spread; median markers as focal points
123123 spec_compliance :
124- score : 14
124+ score : 15
125125 max : 15
126126 items :
127127 - id : SC-01
128128 name : Plot Type
129129 score : 5
130130 max : 5
131131 passed : true
132- comment : Correct sns.swarmplot() with beeswarm spreading
132+ comment : sns.swarmplot() is definitive beeswarm implementation
133133 - id : SC-02
134134 name : Required Features
135135 score : 4
136136 max : 4
137137 passed : true
138- comment : Points spread, consistent sizes, median markers, color by category,
139- clear spacing
138+ comment : Individual points, collision-free spread, category colors, median
139+ markers all present
140140 - id : SC-03
141141 name : Data Mapping
142142 score : 3
143143 max : 3
144144 passed : true
145- comment : Department on X, Performance Score on Y, all 4 groups shown
145+ comment : x= Department, y= Performance Score; all 175 observations visible
146146 - id : SC-04
147147 name : Title & Legend
148- score : 2
148+ score : 3
149149 max : 3
150- passed : false
151- comment : Code title uses pyplots.ai instead of anyplot.ai; legend correct
150+ passed : true
151+ comment : Rendered title correct 'swarm-basic · seaborn · anyplot.ai'; Median
152+ legend accurate
152153 data_quality :
153154 score : 15
154155 max : 15
@@ -158,30 +159,32 @@ review:
158159 score : 6
159160 max : 6
160161 passed : true
161- comment : Tight unimodal Engineering , wide Marketing , bimodal Sales, outlier
162- Support — full coverage
162+ comment : ' Four distinct distributions: tight normal , wide spread , bimodal,
163+ lower with outliers '
163164 - id : DQ-02
164165 name : Realistic Context
165166 score : 5
166167 max : 5
167168 passed : true
168- comment : Employee performance by department is realistic and neutral
169+ comment : Employee performance by department — neutral real-world business
170+ scenario
169171 - id : DQ-03
170172 name : Appropriate Scale
171173 score : 4
172174 max : 4
173175 passed : true
174- comment : Scores 30-100 realistic for performance metrics
176+ comment : Scores clipped to [30,100]; per-department means plausible; outliers
177+ (45,48,95) realistic
175178 code_quality :
176- score : 9
179+ score : 8
177180 max : 10
178181 items :
179182 - id : CQ-01
180183 name : KISS Structure
181184 score : 3
182185 max : 3
183186 passed : true
184- comment : Linear Imports -> Data -> Plot -> Save ; no functions or classes
187+ comment : ' Linear: imports → data → plot → save ; no functions or classes'
185188 - id : CQ-02
186189 name : Reproducibility
187190 score : 2
@@ -193,46 +196,49 @@ review:
193196 score : 2
194197 max : 2
195198 passed : true
196- comment : All imports used
199+ comment : All four imports used
197200 - id : CQ-04
198201 name : Code Elegance
199- score : 2
202+ score : 1
200203 max : 2
201- passed : true
202- comment : Clean Pythonic; strict=True in zip; no fake UI
204+ passed : false
205+ comment : Pythonic code but palette uses non-Okabe-Ito hexes and no os.getenv
206+ ANYPLOT_THEME block
203207 - id : CQ-05
204208 name : Output & API
205209 score : 0
206210 max : 1
207211 passed : false
208- comment : Saves to plot.png not plot-{THEME}.png; no ANYPLOT_THEME handling
212+ comment : Saves to bare ' plot.png' instead of ' plot-{THEME}.png'
209213 library_mastery :
210- score : 7
214+ score : 8
211215 max : 10
212216 items :
213217 - id : LM-01
214218 name : Idiomatic Usage
215- score : 4
219+ score : 5
216220 max : 5
217221 passed : true
218- comment : Correct axes-level swarmplot with hue+legend=False seaborn 0.13+
219- pattern
222+ comment : sns. swarmplot() with hue+legend=False follows seaborn 0.13+ API;
223+ axes-level with ax=ax
220224 - id : LM-02
221225 name : Distinctive Features
222226 score : 3
223227 max : 5
224228 passed : true
225- comment : sns.swarmplot beeswarm algorithm is seaborn-specific; correctly leveraged
226- verdict : REJECTED
229+ comment : Swarmplot collision-avoidance is seaborn-exclusive; sns.despine()
230+ and sns.set_theme() not leveraged
231+ verdict : APPROVED
227232impl_tags :
228233 dependencies : []
229234 techniques :
230235 - custom-legend
231236 patterns :
232237 - data-generation
233238 - iteration-over-groups
239+ dataprep :
234240 - groupby-aggregation
235- dataprep : []
236241 styling :
237242 - alpha-blending
238243 - edge-highlighting
244+ - grid-styling
0 commit comments