Skip to content

Commit c05b5f0

Browse files
chore(highcharts): update quality score 82 and review feedback for line-retention-cohort
1 parent f0c6c16 commit c05b5f0

2 files changed

Lines changed: 212 additions & 10 deletions

File tree

plots/line-retention-cohort/implementations/highcharts.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
"""pyplots.ai
1+
""" pyplots.ai
22
line-retention-cohort: User Retention Curve by Cohort
3-
Library: highcharts | Python 3.13
4-
Quality: pending | Created: 2026-03-16
3+
Library: highcharts unknown | Python 3.14.3
4+
Quality: 82/100 | Created: 2026-03-16
55
"""
66

77
import tempfile
Lines changed: 209 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
# Per-library metadata for highcharts implementation of line-retention-cohort
2-
# Auto-generated by impl-generate.yml
3-
41
library: highcharts
52
specification_id: line-retention-cohort
63
created: '2026-03-16T20:44:42Z'
7-
updated: '2026-03-16T20:44:42Z'
4+
updated: '2026-03-16T20:49:03Z'
85
generated_by: claude-opus-4-5-20251101
96
workflow_run: 23164943620
107
issue: 4572
@@ -13,7 +10,212 @@ library_version: unknown
1310
preview_url: https://storage.googleapis.com/pyplots-images/plots/line-retention-cohort/highcharts/plot.png
1411
preview_thumb: https://storage.googleapis.com/pyplots-images/plots/line-retention-cohort/highcharts/plot_thumb.png
1512
preview_html: https://storage.googleapis.com/pyplots-images/plots/line-retention-cohort/highcharts/plot.html
16-
quality_score: null
13+
quality_score: 82
1714
review:
18-
strengths: []
19-
weaknesses: []
15+
strengths:
16+
- Perfect spec compliance - all required features implemented (cohort curves starting
17+
at 100%, legend with sizes, reference line, varying emphasis)
18+
- Good data storytelling through progressive line thickness and color intensity
19+
- Clean, well-structured code with proper seed and Highcharts export pattern
20+
- Realistic, business-relevant data context
21+
weaknesses:
22+
- Monochromatic blue palette makes the lightest cohorts (Jan, Feb) nearly indistinguishable
23+
from each other
24+
- Y-axis gridlines at every 2% increment create excessive visual clutter (~50 gridlines)
25+
- LineSeries imported from wrong module (series.area instead of series.line)
26+
image_description: The plot displays a line chart with 5 retention curves for monthly
27+
signup cohorts (Jan-May 2025). The title reads "line-retention-cohort · highcharts
28+
· pyplots.ai" with a subtitle "User Retention by Monthly Signup Cohort". All curves
29+
start at 100% at Week 0 and exhibit exponential decay over 12 weeks. The Y-axis
30+
shows "Retained Users (%)" from 0% to 100% with gridlines at every 2% increment
31+
(very dense). The X-axis shows "Week 0" through "Week 12" labeled as "Weeks Since
32+
Signup". A dashed horizontal line at 20% marks the "20% Retention Target" with
33+
a label at the right edge. The legend is positioned vertically on the right, listing
34+
each cohort with sample size (e.g., "Jan 2025 (n=1,245)"). Colors use a monochromatic
35+
blue palette from lightest (Jan 2025) to darkest (May 2025). Older cohorts have
36+
thinner lines and smaller markers, newer cohorts are thicker and bolder. The Jan
37+
2025 cohort drops to approximately 18% by Week 12, while May 2025 retains approximately
38+
35%.
39+
criteria_checklist:
40+
visual_quality:
41+
score: 25
42+
max: 30
43+
items:
44+
- id: VQ-01
45+
name: Text Legibility
46+
score: 7
47+
max: 8
48+
passed: true
49+
comment: Font sizes explicitly set throughout (title 48px, axis titles 36px,
50+
tick labels 28px, legend 30px). The 20% target label is slightly small.
51+
- id: VQ-02
52+
name: No Overlap
53+
score: 6
54+
max: 6
55+
passed: true
56+
comment: No overlapping text elements
57+
- id: VQ-03
58+
name: Element Visibility
59+
score: 4
60+
max: 6
61+
passed: false
62+
comment: Lines visible but lightest two blue cohorts are nearly indistinguishable
63+
from each other and from the background
64+
- id: VQ-04
65+
name: Color Accessibility
66+
score: 3
67+
max: 4
68+
passed: false
69+
comment: Colorblind-safe but monochromatic palette has insufficient contrast
70+
between adjacent series
71+
- id: VQ-05
72+
name: Layout & Canvas
73+
score: 3
74+
max: 4
75+
passed: true
76+
comment: Good margins but significant empty space below 20% threshold
77+
- id: VQ-06
78+
name: Axis Labels & Title
79+
score: 2
80+
max: 2
81+
passed: true
82+
comment: Descriptive labels with units
83+
design_excellence:
84+
score: 12
85+
max: 20
86+
items:
87+
- id: DE-01
88+
name: Aesthetic Sophistication
89+
score: 5
90+
max: 8
91+
passed: true
92+
comment: Custom blue gradient palette with intentional hierarchy. Above defaults
93+
but not publication-level.
94+
- id: DE-02
95+
name: Visual Refinement
96+
score: 3
97+
max: 6
98+
passed: false
99+
comment: Grid excessively dense at every 2%. Grid color subtle but density
100+
clutters.
101+
- id: DE-03
102+
name: Data Storytelling
103+
score: 4
104+
max: 6
105+
passed: true
106+
comment: Good hierarchy via progressive line thickness and color. Reference
107+
line adds business context.
108+
spec_compliance:
109+
score: 15
110+
max: 15
111+
items:
112+
- id: SC-01
113+
name: Plot Type
114+
score: 5
115+
max: 5
116+
passed: true
117+
comment: Correct line chart with multiple cohort curves
118+
- id: SC-02
119+
name: Required Features
120+
score: 4
121+
max: 4
122+
passed: true
123+
comment: All spec features present
124+
- id: SC-03
125+
name: Data Mapping
126+
score: 3
127+
max: 3
128+
passed: true
129+
comment: X/Y correctly mapped
130+
- id: SC-04
131+
name: Title & Legend
132+
score: 3
133+
max: 3
134+
passed: true
135+
comment: Correct title format and legend labels with cohort sizes
136+
data_quality:
137+
score: 14
138+
max: 15
139+
items:
140+
- id: DQ-01
141+
name: Feature Coverage
142+
score: 5
143+
max: 6
144+
passed: true
145+
comment: 5 cohorts with varying decay rates showing improving retention trend
146+
- id: DQ-02
147+
name: Realistic Context
148+
score: 5
149+
max: 5
150+
passed: true
151+
comment: Realistic SaaS product analytics scenario
152+
- id: DQ-03
153+
name: Appropriate Scale
154+
score: 4
155+
max: 4
156+
passed: true
157+
comment: Realistic retention values and cohort sizes
158+
code_quality:
159+
score: 10
160+
max: 10
161+
items:
162+
- id: CQ-01
163+
name: KISS Structure
164+
score: 3
165+
max: 3
166+
passed: true
167+
comment: Clean linear flow
168+
- id: CQ-02
169+
name: Reproducibility
170+
score: 2
171+
max: 2
172+
passed: true
173+
comment: np.random.seed(42) set
174+
- id: CQ-03
175+
name: Clean Imports
176+
score: 2
177+
max: 2
178+
passed: true
179+
comment: All imports used
180+
- id: CQ-04
181+
name: Code Elegance
182+
score: 2
183+
max: 2
184+
passed: true
185+
comment: Clean loop for series creation
186+
- id: CQ-05
187+
name: Output & API
188+
score: 1
189+
max: 1
190+
passed: true
191+
comment: Saves plot.png via Selenium
192+
library_mastery:
193+
score: 6
194+
max: 10
195+
items:
196+
- id: LM-01
197+
name: Idiomatic Usage
198+
score: 4
199+
max: 5
200+
passed: true
201+
comment: Good use of Chart, HighchartsOptions, plotLines. Could better leverage
202+
tooltip formatting.
203+
- id: LM-02
204+
name: Distinctive Features
205+
score: 2
206+
max: 5
207+
passed: false
208+
comment: Uses plotLines and vertical legend but doesn't leverage more distinctive
209+
Highcharts features
210+
verdict: REJECTED
211+
impl_tags:
212+
dependencies:
213+
- selenium
214+
techniques:
215+
- html-export
216+
patterns:
217+
- data-generation
218+
- iteration-over-groups
219+
dataprep: []
220+
styling:
221+
- grid-styling

0 commit comments

Comments
 (0)