Skip to content

Commit ce45444

Browse files
chore(highcharts): update quality score 90 and review feedback for heatmap-cohort-retention
1 parent d00d2a9 commit ce45444

2 files changed

Lines changed: 76 additions & 70 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
"""pyplots.ai
1+
""" pyplots.ai
22
heatmap-cohort-retention: Cohort Retention Heatmap
33
Library: highcharts unknown | Python 3.14.3
4-
Quality: 85/100 | Created: 2026-03-16
4+
Quality: 90/100 | Created: 2026-03-16
55
"""
66

77
import json

plots/heatmap-cohort-retention/metadata/highcharts.yaml

Lines changed: 74 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
library: highcharts
22
specification_id: heatmap-cohort-retention
33
created: '2026-03-16T20:46:45Z'
4-
updated: '2026-03-16T20:51:24Z'
4+
updated: '2026-03-16T21:00:52Z'
55
generated_by: claude-opus-4-5-20251101
66
workflow_run: 23165008487
77
issue: 4570
@@ -10,101 +10,106 @@ library_version: unknown
1010
preview_url: https://storage.googleapis.com/pyplots-images/plots/heatmap-cohort-retention/highcharts/plot.png
1111
preview_thumb: https://storage.googleapis.com/pyplots-images/plots/heatmap-cohort-retention/highcharts/plot_thumb.png
1212
preview_html: https://storage.googleapis.com/pyplots-images/plots/heatmap-cohort-retention/highcharts/plot.html
13-
quality_score: 85
13+
quality_score: 90
1414
review:
1515
strengths:
16-
- Perfect spec compliance with all required features including triangular shape,
17-
retention percentages in cells, cohort sizes, and color bar
18-
- Strong data quality with realistic SaaS retention scenario and plausible values
19-
- Custom 7-stop blue colorAxis with adaptive white/dark text labels via JS formatter
20-
- Clean code structure with fallback CDN URLs for reliability
16+
- Excellent data storytelling with highlighted best/worst cohorts, star annotations,
17+
and color-coded labels explaining the narrative
18+
- Adaptive data label colors (white on dark, dark on light cells) ensure readability
19+
across the full retention range
20+
- Clean triangular shape with transparent null cells and matching border colors
21+
- Realistic SaaS retention data with differentiated cohort curves and plausible
22+
context
2123
weaknesses:
22-
- Subtitle, x-axis title, and x-axis category labels are crowded at the top
23-
- No data storytelling emphasis — all cohorts look similar with no focal point
24-
- Right margin is generous, slightly reducing chart area
25-
image_description: 'The plot displays a triangular heatmap of cohort retention data
26-
with a blue sequential colormap. The title reads "heatmap-cohort-retention · highcharts
27-
· pyplots.ai" at the top, followed by a subtitle "Monthly cohort retention rates
28-
— percentage of users returning each month after signup" and the x-axis title
29-
"Months Since Signup" — all three lines stacked closely together at the top. The
30-
x-axis shows "Month 0" through "Month 9" along the top edge. The y-axis on the
31-
left shows cohort labels from "Oct 2024 (1,290)" at the top to "Jan 2024 (1,240)"
32-
at the bottom, with "Signup Cohort (Users)" as the axis title. Each cell contains
33-
the retention percentage as text — white text on dark blue cells, dark text on
34-
light blue cells. The triangular shape is correct: Oct 2024 has only 1 column
35-
(100%), while Jan 2024 spans all 10 months (100% to 22.5%). A vertical color bar
36-
on the right shows "Retention %" from 0% to 100%. The background is a subtle off-white
37-
(#fafafa). Cell borders match the background, creating clean visual separation.'
24+
- Does not use the highcharts-core Python library; constructs raw JSON configuration
25+
instead
26+
image_description: 'The plot displays a triangular cohort retention heatmap with
27+
the title "heatmap-cohort-retention · highcharts · pyplots.ai" at the top. Below
28+
the title is a subtitle: "Monthly cohort retention rates — percentage of users
29+
returning each month after signup" with colored annotations highlighting the best
30+
cohort (Jun 2024 — new onboarding, in blue with a star) and worst cohort (Apr
31+
2024 — buggy release, in red). The x-axis at the top shows "Month 0" through "Month
32+
9" with the label "Months Since Signup." The y-axis on the left shows cohort labels
33+
with user counts (e.g., "Jan 2024 (1,240)"). The heatmap uses a blue sequential
34+
colormap from very light blue (low retention) to very dark navy (high retention/100%).
35+
Each cell displays its retention percentage with adaptive text color (white on
36+
dark cells, dark on light cells). The triangular shape is correctly formed — Jan
37+
2024 at the bottom has all 10 periods, while Oct 2024 at the top has only 1. A
38+
vertical color bar on the right shows "Retention %" from 0% to 100%. The Jun 2024
39+
row has a subtle blue plotBand and its y-axis label is bold with a star; the Apr
40+
2024 row has a subtle red plotBand and red-colored label. The background is a
41+
soft off-white (#fafafa).'
3842
criteria_checklist:
3943
visual_quality:
40-
score: 26
44+
score: 28
4145
max: 30
4246
items:
4347
- id: VQ-01
4448
name: Text Legibility
4549
score: 7
4650
max: 8
4751
passed: true
48-
comment: All font sizes explicitly set (title 48px, subtitle 28px, axis titles
49-
30px, labels 26-28px, data labels 24px). All readable.
52+
comment: All font sizes explicitly set (title 48px, subtitle 26px, axis titles
53+
28px, labels 24-26px, data labels 24px). Subtitle annotations slightly small.
5054
- id: VQ-02
5155
name: No Overlap
52-
score: 4
56+
score: 6
5357
max: 6
5458
passed: true
55-
comment: Subtitle, x-axis title, and category labels stacked closely at top
56-
creating visual crowding.
59+
comment: No overlapping text. Data labels fit within cells. Y-axis labels
60+
well-spaced.
5761
- id: VQ-03
5862
name: Element Visibility
5963
score: 6
6064
max: 6
6165
passed: true
62-
comment: Heatmap cells well-sized with clear border separation. Adaptive data
63-
label colors.
66+
comment: Heatmap cells well-sized with 3px borders creating crisp separation.
67+
Triangular shape well-defined.
6468
- id: VQ-04
6569
name: Color Accessibility
6670
score: 4
6771
max: 4
6872
passed: true
69-
comment: Blue sequential colormap is colorblind-safe. Adaptive white/dark
70-
text for contrast.
73+
comment: Blue sequential colormap is colorblind-safe. Adaptive text colors
74+
ensure contrast.
7175
- id: VQ-05
7276
name: Layout & Canvas
7377
score: 3
7478
max: 4
7579
passed: true
76-
comment: Chart fills canvas reasonably. Right margin for colorbar is generous.
80+
comment: Good canvas usage. Triangular shape inherently leaves empty space
81+
in upper-right.
7782
- id: VQ-06
7883
name: Axis Labels & Title
7984
score: 2
8085
max: 2
8186
passed: true
8287
comment: 'Descriptive labels: Months Since Signup, Signup Cohort (Users).'
8388
design_excellence:
84-
score: 13
89+
score: 15
8590
max: 20
8691
items:
8792
- id: DE-01
8893
name: Aesthetic Sophistication
8994
score: 6
9095
max: 8
9196
passed: true
92-
comment: 'Custom 7-stop blue gradient, custom font family, #fafafa background,
93-
adaptive data label colors. Above defaults.'
97+
comment: Custom 8-stop blue palette, adaptive text colors, highlighted cohorts
98+
with star/color, off-white background, custom font stack.
9499
- id: DE-02
95100
name: Visual Refinement
96101
score: 4
97102
max: 6
98103
passed: true
99-
comment: Grid lines removed, axis lines removed, cell borders match background
100-
for clean separation.
104+
comment: Grid/axis lines removed, clean borders matching background, subtle
105+
plotBands for emphasis rows.
101106
- id: DE-03
102107
name: Data Storytelling
103-
score: 3
108+
score: 5
104109
max: 6
105-
passed: false
106-
comment: Triangular shape and gradient convey retention decay but no focal
107-
point or emphasis on insights.
110+
passed: true
111+
comment: Best cohort starred and blue-highlighted, worst in red, subtitle
112+
explains why, plotBands draw attention. Clear narrative.
108113
spec_compliance:
109114
score: 15
110115
max: 15
@@ -114,51 +119,51 @@ review:
114119
score: 5
115120
max: 5
116121
passed: true
117-
comment: Correct heatmap with triangular shape.
122+
comment: Correct triangular heatmap with proper cohort structure.
118123
- id: SC-02
119124
name: Required Features
120125
score: 4
121126
max: 4
122127
passed: true
123-
comment: 'All spec features present: period 0=100%, triangular shape, sequential
124-
colormap, retention % in cells, cohort sizes, Month labels, color bar.'
128+
comment: 'All spec features present: triangular shape, percentages in cells,
129+
cohort sizes, blue colormap, color bar, Month N labels.'
125130
- id: SC-03
126131
name: Data Mapping
127132
score: 3
128133
max: 3
129134
passed: true
130-
comment: X=periods, Y=cohorts, color=retention rate. All correct.
135+
comment: X=periods, Y=cohorts. Period 0=100%. Triangular shape correct.
131136
- id: SC-04
132137
name: Title & Legend
133138
score: 3
134139
max: 3
135140
passed: true
136-
comment: Title follows spec-id · library · pyplots.ai format. Color bar labeled
137-
Retention %.
141+
comment: Title format correct. Color bar labeled Retention %.
138142
data_quality:
139-
score: 14
143+
score: 15
140144
max: 15
141145
items:
142146
- id: DQ-01
143147
name: Feature Coverage
144-
score: 5
148+
score: 6
145149
max: 6
146150
passed: true
147-
comment: Shows retention decay, triangular shape, cohort variation. Cohorts
148-
are somewhat similar in decay pattern.
151+
comment: Differentiated retention curves, best/worst cohorts, varied sizes,
152+
proper triangular structure.
149153
- id: DQ-02
150154
name: Realistic Context
151155
score: 5
152156
max: 5
153157
passed: true
154-
comment: SaaS monthly cohort retention is a classic realistic business scenario.
158+
comment: SaaS monthly cohort retention — real, neutral business scenario with
159+
plausible narratives.
155160
- id: DQ-03
156161
name: Appropriate Scale
157162
score: 4
158163
max: 4
159164
passed: true
160-
comment: Retention 100% to ~17-22% over 9 months is realistic. Cohort sizes
161-
1190-1680 are plausible.
165+
comment: Retention 100% to ~20% realistic. Cohort sizes 1,190-1,680 plausible
166+
for SaaS.
162167
code_quality:
163168
score: 10
164169
max: 10
@@ -168,7 +173,7 @@ review:
168173
score: 3
169174
max: 3
170175
passed: true
171-
comment: 'Linear flow: imports, data generation, chart config, HTML, screenshot.'
176+
comment: 'Linear flow: imports, data, config, HTML, screenshot. No functions/classes.'
172177
- id: CQ-02
173178
name: Reproducibility
174179
score: 2
@@ -180,45 +185,46 @@ review:
180185
score: 2
181186
max: 2
182187
passed: true
183-
comment: All imports are used.
188+
comment: All imports used.
184189
- id: CQ-04
185190
name: Code Elegance
186191
score: 2
187192
max: 2
188193
passed: true
189-
comment: Clean, well-organized. Chart config as dict is idiomatic. Fallback
190-
URLs.
194+
comment: Clean code, appropriate complexity. No fake UI.
191195
- id: CQ-05
192196
name: Output & API
193197
score: 1
194198
max: 1
195199
passed: true
196-
comment: Saves as plot.png and plot.html.
200+
comment: Saves as plot.png via Selenium.
197201
library_mastery:
198202
score: 7
199203
max: 10
200204
items:
201205
- id: LM-01
202206
name: Idiomatic Usage
203-
score: 4
207+
score: 3
204208
max: 5
205209
passed: true
206-
comment: Constructs Highcharts heatmap via JSON config + Selenium. Valid approach.
210+
comment: Raw JSON config approach instead of highcharts-core Python API. Works
211+
correctly but bypasses Python wrapper.
207212
- id: LM-02
208213
name: Distinctive Features
209-
score: 3
214+
score: 4
210215
max: 5
211216
passed: true
212-
comment: Uses heatmap module, colorAxis with stops, custom JS formatter, tooltip
213-
pointFormat, opposite x-axis.
214-
verdict: REJECTED
217+
comment: Good use of colorAxis, plotBands, useHTML formatters, heatmap module,
218+
tooltip config.
219+
verdict: APPROVED
215220
impl_tags:
216221
dependencies:
217222
- selenium
218223
techniques:
224+
- colorbar
219225
- annotations
226+
- hover-tooltips
220227
- html-export
221-
- colorbar
222228
patterns:
223229
- data-generation
224230
- matrix-construction

0 commit comments

Comments
 (0)