Skip to content

Commit c7d507a

Browse files
chore(seaborn): update quality score 88 and review feedback for stem-basic
1 parent 7ddc610 commit c7d507a

2 files changed

Lines changed: 83 additions & 89 deletions

File tree

plots/stem-basic/implementations/python/seaborn.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
"""anyplot.ai
1+
""" anyplot.ai
22
stem-basic: Basic Stem Plot
33
Library: seaborn 0.13.2 | Python 3.13.13
4-
Quality: 80/100 | Updated: 2026-04-30
4+
Quality: 88/100 | Updated: 2026-04-30
55
"""
66

77
import os

plots/stem-basic/metadata/python/seaborn.yaml

Lines changed: 81 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ library: seaborn
22
language: python
33
specification_id: stem-basic
44
created: '2025-12-23T20:45:35Z'
5-
updated: '2026-04-30T14:55:01Z'
5+
updated: '2026-04-30T15:04:36Z'
66
generated_by: claude-sonnet
77
workflow_run: 25171839176
88
issue: 972
@@ -12,145 +12,140 @@ preview_url_light: https://storage.googleapis.com/anyplot-images/plots/stem-basi
1212
preview_url_dark: https://storage.googleapis.com/anyplot-images/plots/stem-basic/python/seaborn/plot-dark.png
1313
preview_html_light: null
1414
preview_html_dark: null
15-
quality_score: 80
15+
quality_score: 88
1616
review:
1717
strengths:
18-
- 'Excellent data choice: damped sinusoidal impulse response is the canonical stem
19-
plot use case and creates natural visual decay storytelling'
20-
- Font sizes explicitly set at all three levels (24/20/16) — renders correctly at
21-
4800x2700
22-
- Clean KISS code structure with fixed seed for reproducibility
23-
- Marker sizing (s=300) and stem linewidth well-calibrated for 30 data points
24-
- Both rendered images pass theme-readability checks — all text readable in both
25-
light and dark themes
18+
- Perfect visual quality in both light and dark themes with correct font sizing
19+
and readable text throughout
20+
- 'Textbook data choice: damped sinusoidal impulse response is the canonical signal
21+
processing example for stem plots'
22+
- Background-edged scatter markers (edgecolor=PAGE_BG) create clean visual separation
23+
from stems
24+
- 'All spec requirements met: thin stems, visible circular markers, baseline at
25+
y=0, consistent sizing'
2626
weaknesses:
27-
- 'CRITICAL: Code uses #306998 (Python Blue) for stems and #FFD43B for markers —
28-
replace both with #009E73 (Okabe-Ito position 1)'
29-
- 'CRITICAL: No theme adaptation code — add ANYPLOT_THEME env var reading and sns.set_theme()
30-
with PAGE_BG/INK/INK_SOFT adaptive tokens'
31-
- 'CRITICAL: Output saved to plot.png — must be plot-{THEME}.png (pipeline runs
32-
code twice)'
33-
- 'MAJOR: Title contains pyplots.ai — must be anyplot.ai'
34-
- 'MINOR: Grid uses linestyle=-- (dashed) — style guide requires solid thin lines;
35-
switch to yaxis-only solid grid with alpha=0.15'
27+
- No visual storytelling or annotations to guide the viewer through the decay narrative
28+
— an envelope curve or peak annotation would earn DE-03 points
29+
- Seaborn is used only for scatterplot markers and sns.set_theme() theming; no seaborn-distinctive
30+
techniques are leveraged (LM-02 low)
3631
image_description: |-
3732
Light render (plot-light.png):
38-
Background: Warm off-white approximately #FAF8F1 — not pure white, correct for light theme
39-
Chrome: Title "stem-basic · seaborn · anyplot.ai" in dark text clearly readable; axis labels "Sample Index (n)" and "Amplitude" clearly readable; tick labels dark and readable against light background
40-
Data: All stems (vertical lines) and markers (circles) rendered in teal green #009E73; baseline at y=0 visible; 30 data points across full x-range [0,29]; y range approximately [-1.0, 1.85]
41-
Legibility verdict: PASS
33+
Background: Warm off-white #FAF8F1 — correct, not pure white
34+
Chrome: Title "stem-basic · seaborn · anyplot.ai" in dark text readable; axis labels "Sample Index (n)" and "Amplitude" clearly visible; tick labels at correct size and dark color
35+
Data: 30 stems in brand green #009E73 from y=0 baseline to data values; large circular markers with PAGE_BG edge color; both positive and negative stems; subtle y-axis horizontal grid
36+
Legibility verdict: PASS — all text elements clearly readable against warm off-white background
4237
4338
Dark render (plot-dark.png):
44-
Background: Warm near-black approximately #1A1A17 — not pure black, correct for dark theme
45-
Chrome: Title, axis labels, and tick labels all appear light-colored and clearly readable against dark background; no dark-on-dark failures observed; bottom and left spines visible in light color
46-
Data: Stems and markers identical teal green #009E73 — indistinguishable from light render (only chrome changed); baseline at y=0 visible; brand green reads clearly on dark surface
47-
Legibility verdict: PASS
48-
49-
NOTE: The images appear to have been generated from a different (corrected) version of the code than what is committed in seaborn.py. The committed code specifies #306998 (Python Blue) for stems and #FFD43B (yellow) for markers, but both renders show uniform #009E73 teal. The committed code also saves to plot.png with no theme adaptation, yet the images show correct theme adaptation with proper filenames. The code must be corrected to match what was rendered.
39+
Background: Near-black #1A1A17 — correct, not pure black
40+
Chrome: Title in light/cream text — readable; axis labels in light text clearly visible; tick labels light-colored and legible; no dark-on-dark issues detected
41+
Data: Colors identical to light render — brand green #009E73 stems and markers unchanged; only chrome elements flipped; grid still subtle and visible
42+
Legibility verdict: PASS — all text elements clearly readable against near-black background; no dark-on-dark failures
5043
criteria_checklist:
5144
visual_quality:
52-
score: 28
45+
score: 30
5346
max: 30
5447
items:
5548
- id: VQ-01
5649
name: Text Legibility
5750
score: 8
5851
max: 8
5952
passed: true
60-
comment: 'All font sizes explicitly set: title=24pt, labels=20pt, ticks=16pt;
61-
readable in both themes'
53+
comment: Title 24pt, axis labels 20pt, ticks 16pt; both themes fully legible
6254
- id: VQ-02
6355
name: No Overlap
6456
score: 6
6557
max: 6
6658
passed: true
67-
comment: No overlapping elements; 30 points well-spaced
59+
comment: 30 stems evenly spaced, no element collisions
6860
- id: VQ-03
6961
name: Element Visibility
7062
score: 6
7163
max: 6
7264
passed: true
73-
comment: s=300 markers appropriate for 30 data points; stems clearly visible
65+
comment: Large markers (s=300) and 2.5px stems clearly visible; background-edged
66+
markers pop off stems
7467
- id: VQ-04
7568
name: Color Accessibility
7669
score: 2
7770
max: 2
7871
passed: true
79-
comment: Single teal series, CVD-safe Okabe-Ito, high contrast on both surfaces
72+
comment: Single CVD-safe brand green, no red-green reliance
8073
- id: VQ-05
8174
name: Layout & Canvas
8275
score: 4
8376
max: 4
8477
passed: true
85-
comment: 16x9 canvas well-utilized; no cutoff; good margins
78+
comment: 16:9 proportions appropriate; nothing cut off; tight_layout used
8679
- id: VQ-06
8780
name: Axis Labels & Title
8881
score: 2
8982
max: 2
9083
passed: true
91-
comment: Sample Index (n) and Amplitude are descriptive
84+
comment: Sample Index (n) with units, Amplitude descriptive; title format
85+
correct
9286
- id: VQ-07
9387
name: Palette Compliance
94-
score: 0
88+
score: 2
9589
max: 2
96-
passed: false
97-
comment: 'Code uses #306998 (Python Blue) — explicit 0 trigger; no ANYPLOT_THEME
98-
handling; saves to plot.png not plot-{THEME}.png'
90+
passed: true
91+
comment: 'First (only) series is #009E73; backgrounds #FAF8F1 / #1A1A17; both
92+
renders theme-correct'
9993
design_excellence:
100-
score: 11
94+
score: 12
10195
max: 20
10296
items:
10397
- id: DE-01
10498
name: Aesthetic Sophistication
105-
score: 4
99+
score: 5
106100
max: 8
107101
passed: true
108-
comment: Clean, professional; spines removed; well-configured but not exceptional
102+
comment: Professional polish; background-edged markers are a nice design touch;
103+
single-color simplicity is appropriate but limited
109104
- id: DE-02
110105
name: Visual Refinement
111-
score: 3
106+
score: 4
112107
max: 6
113108
passed: true
114-
comment: Spines removed but grid uses dashed linestyle contrary to style guide
115-
solid-thin requirement; alpha=0.3 slightly high
109+
comment: Top/right spines removed; y-axis-only grid at low opacity; generous
110+
whitespace
116111
- id: DE-03
117112
name: Data Storytelling
118-
score: 4
113+
score: 3
119114
max: 6
120-
passed: true
121-
comment: Damped sinusoidal decay creates natural narrative; positive/negative
122-
alternation adds visual rhythm
115+
passed: false
116+
comment: Damped sinusoidal has a natural decay narrative but no annotations
117+
or emphasis guide the viewer
123118
spec_compliance:
124-
score: 13
119+
score: 15
125120
max: 15
126121
items:
127122
- id: SC-01
128123
name: Plot Type
129124
score: 5
130125
max: 5
131126
passed: true
132-
comment: 'Correct stem plot: vertical lines from y=0 baseline to circular
133-
markers'
127+
comment: 'Correct stem plot: vertical lines from baseline to data values with
128+
circular markers'
134129
- id: SC-02
135130
name: Required Features
136131
score: 4
137132
max: 4
138133
passed: true
139-
comment: Thin stems, visible markers, y=0 baseline, consistent sizing — all
140-
present
134+
comment: Thin stems, visible circular markers, baseline at y=0, consistent
135+
sizing throughout
141136
- id: SC-03
142137
name: Data Mapping
143138
score: 3
144139
max: 3
145140
passed: true
146-
comment: x=Sample Index, y=Amplitude; all 30 points visible
141+
comment: X=sample index, Y=amplitude; all 30 data points visible
147142
- id: SC-04
148143
name: Title & Legend
149-
score: 1
144+
score: 3
150145
max: 3
151-
passed: false
152-
comment: Code title string has pyplots.ai instead of anyplot.ai; no legend
153-
needed for single series
146+
passed: true
147+
comment: stem-basic · seaborn · anyplot.ai correct; no legend needed for single
148+
series
154149
data_quality:
155150
score: 15
156151
max: 15
@@ -160,77 +155,77 @@ review:
160155
score: 6
161156
max: 6
162157
passed: true
163-
comment: Shows positive and negative amplitudes, zero crossings, decaying
164-
envelope — full feature space
158+
comment: Both positive and negative stems; decaying oscillation demonstrates
159+
plot type comprehensively
165160
- id: DQ-02
166161
name: Realistic Context
167162
score: 5
168163
max: 5
169164
passed: true
170-
comment: Discrete impulse response in signal processing is a canonical real-world
171-
neutral scenario
165+
comment: Damped sinusoidal impulse response is canonical signal processing
166+
example; neutral and plausible
172167
- id: DQ-03
173168
name: Appropriate Scale
174169
score: 4
175170
max: 4
176171
passed: true
177-
comment: Amplitude ±~1.85 with exponential decay is physically realistic for
178-
normalized impulse response
172+
comment: Amplitude -1.0 to 1.85, sample indices 0-29; realistic engineering
173+
values
179174
code_quality:
180-
score: 8
175+
score: 10
181176
max: 10
182177
items:
183178
- id: CQ-01
184179
name: KISS Structure
185180
score: 3
186181
max: 3
187182
passed: true
188-
comment: Linear Imports -> Data -> Plot -> Save; no functions or classes
183+
comment: Flat script, no functions or classes
189184
- id: CQ-02
190185
name: Reproducibility
191186
score: 2
192187
max: 2
193188
passed: true
194-
comment: np.random.seed(42) present
189+
comment: np.random.seed(42) set
195190
- id: CQ-03
196191
name: Clean Imports
197192
score: 2
198193
max: 2
199194
passed: true
200-
comment: All four imports (matplotlib, numpy, pandas, seaborn) actively used
195+
comment: All five imports (os, matplotlib, numpy, pandas, seaborn) are used
201196
- id: CQ-04
202197
name: Code Elegance
203-
score: 1
198+
score: 2
204199
max: 2
205-
passed: false
206-
comment: Clean structure but hardcoded non-compliant colors and absent theme
207-
adaptation
200+
passed: true
201+
comment: 'Clean hybrid: seaborn scatterplot for markers, matplotlib vlines
202+
for stems — correct approach'
208203
- id: CQ-05
209204
name: Output & API
210-
score: 0
205+
score: 1
211206
max: 1
212-
passed: false
213-
comment: Saves to plot.png — must be plot-{THEME}.png; no ANYPLOT_THEME logic
214-
present
207+
passed: true
208+
comment: Saves as plot-{THEME}.png with correct facecolor and bbox_inches
215209
library_mastery:
216-
score: 5
210+
score: 6
217211
max: 10
218212
items:
219213
- id: LM-01
220214
name: Idiomatic Usage
221-
score: 3
215+
score: 4
222216
max: 5
223217
passed: true
224-
comment: Correctly uses sns.scatterplot for marker rendering with axes-level
225-
API; hybrid vlines+scatter is practical for library lacking native stemplot
218+
comment: sns.set_theme() with full rc dict is idiomatic; axes-level scatterplot
219+
used correctly; hybrid with matplotlib vlines is right approach
226220
- id: LM-02
227221
name: Distinctive Features
228222
score: 2
229223
max: 5
230224
passed: false
231-
comment: Uses seaborn scatter with edgecolor and zorder for markers but implementation
232-
is primarily matplotlib
233-
verdict: REJECTED
225+
comment: Seaborn contribution limited to scatterplot markers and theming;
226+
no seaborn-distinctive features used (FacetGrid, statistical transforms,
227+
etc.)
228+
verdict: APPROVED
234229
impl_tags:
235230
dependencies: []
236231
techniques: []
@@ -241,4 +236,3 @@ impl_tags:
241236
styling:
242237
- alpha-blending
243238
- edge-highlighting
244-
- grid-styling

0 commit comments

Comments
 (0)