|
1 | 1 | library: plotly |
| 2 | +language: python |
2 | 3 | specification_id: contour-basic |
3 | 4 | created: '2025-12-23T01:31:03Z' |
4 | | -updated: '2025-12-23T06:54:09Z' |
5 | | -generated_by: claude-opus-4-5-20251101 |
6 | | -workflow_run: 20448654973 |
7 | | -issue: 0 |
8 | | -python_version: 3.13.11 |
9 | | -library_version: 6.5.0 |
10 | | -preview_url: https://storage.googleapis.com/anyplot-images/plots/contour-basic/plotly/plot.png |
11 | | -preview_html: https://storage.googleapis.com/anyplot-images/plots/contour-basic/plotly/plot.html |
12 | | -quality_score: 93 |
13 | | -impl_tags: |
14 | | - dependencies: [] |
15 | | - techniques: |
16 | | - - colorbar |
17 | | - - annotations |
18 | | - - html-export |
19 | | - patterns: |
20 | | - - data-generation |
21 | | - - matrix-construction |
22 | | - dataprep: [] |
23 | | - styling: |
24 | | - - custom-colormap |
| 5 | +updated: '2026-04-24T01:30:13Z' |
| 6 | +generated_by: claude-opus |
| 7 | +workflow_run: 24867165978 |
| 8 | +issue: 855 |
| 9 | +python_version: 3.14.4 |
| 10 | +library_version: 6.7.0 |
| 11 | +preview_url_light: https://storage.googleapis.com/anyplot-images/plots/contour-basic/python/plotly/plot-light.png |
| 12 | +preview_url_dark: https://storage.googleapis.com/anyplot-images/plots/contour-basic/python/plotly/plot-dark.png |
| 13 | +preview_html_light: https://storage.googleapis.com/anyplot-images/plots/contour-basic/python/plotly/plot-light.html |
| 14 | +preview_html_dark: https://storage.googleapis.com/anyplot-images/plots/contour-basic/python/plotly/plot-dark.html |
| 15 | +quality_score: 85 |
25 | 16 | review: |
26 | 17 | strengths: |
27 | | - - Excellent use of Viridis colormap for colorblind accessibility |
28 | | - - Well-implemented contour labels with proper font size and white color for visibility |
29 | | - - Mathematical peaks function creates visually interesting surface with multiple |
30 | | - local minima/maxima |
31 | | - - Clean code structure following KISS principles |
32 | | - - Proper font sizing for 4800x2700 output resolution |
33 | | - - Both PNG and HTML outputs generated for static and interactive viewing |
| 18 | + - Mountain terrain context with real-world axis labels (Distance East/North km) |
| 19 | + and elevation values creates a professional, meaningful visualization |
| 20 | + - Viridis colorscale is the correct choice for sequential elevation data — perceptually |
| 21 | + uniform and colorblind-safe |
| 22 | + - Contour labels with white labelfont are clearly readable against the viridis fill |
| 23 | + in both themes |
| 24 | + - 'Full spec feature coverage: filled contours + contour lines + colorbar + labels |
| 25 | + all present' |
| 26 | + - HTML export takes advantage of Plotly's interactive capabilities (hover, zoom, |
| 27 | + pan) |
| 28 | + - Both light and dark renders are visually polished with correct theme chrome |
34 | 29 | weaknesses: |
35 | | - - Axis labels lack domain-specific context or units (e.g., could be "X Position |
36 | | - (units)" for a realistic scenario) |
37 | | - - Data context is purely mathematical rather than tied to a real-world application |
38 | | - from the spec examples |
39 | | - image_description: 'The plot displays a filled contour visualization of a mathematical |
40 | | - surface (peaks-like function) using the Viridis colormap. The plot shows multiple |
41 | | - regions: a prominent yellow peak (maximum ~8) in the upper-center region around |
42 | | - coordinates (0, 1.5), several teal/cyan mid-value regions, a dark blue minor depression |
43 | | - around (-2, 0.5), and a deep purple/magenta minimum (~-6) in the lower-center |
44 | | - area around (0, -2). The colorbar on the right shows the Z Value scale ranging |
45 | | - from approximately -6 to 8. Contour lines are clearly drawn with white labels |
46 | | - showing the numeric values at each level. The title "contour-basic · plotly · |
47 | | - pyplots.ai" appears centered at the top. Axis labels show "X Coordinate" and "Y |
48 | | - Coordinate" with tick marks from -3 to 3 on both axes.' |
| 30 | + - 'Code in repository does not match the images: implementations/python/plotly.py |
| 31 | + contains an older version that saves to plot.png/plot.html (not plot-{THEME}.png), |
| 32 | + uses template=plotly_white without ANYPLOT_THEME reading, and references pyplots.ai |
| 33 | + — the committed code would not reproduce the shown images' |
| 34 | + - Contour level labels become slightly crowded around the high-elevation peak center |
| 35 | + (~1100-1200m range) where concentric contours are dense |
| 36 | + - Colorbar area occupies generous canvas space on the right — could be slightly |
| 37 | + narrower to give the plot more horizontal room |
| 38 | + image_description: |- |
| 39 | + Light render (plot-light.png): |
| 40 | + Background: Warm off-white consistent with #FAF8F1 — not pure white |
| 41 | + Chrome: Title "Mountain Terrain · contour-basic · plotly · anyplot.ai" in dark text, clearly readable. Axis labels "Distance East (km)" and "Distance North (km)" in dark text, clearly readable. Tick labels (0,2,4,6,8,10) in dark secondary text, readable. Colorbar label "Elevation (m)" readable. |
| 42 | + Data: Viridis colorscale from dark purple (~300m) to bright yellow (~1200m). Two distinct elevation peaks: dominant peak at ~(6,6) reaching 1200m, secondary at ~(2,3) reaching ~900m. White contour lines with numeric elevation labels (350-1200m range). |
| 43 | + Legibility verdict: PASS — all text elements readable against light background |
| 44 | +
|
| 45 | + Dark render (plot-dark.png): |
| 46 | + Background: Near-black consistent with #1A1A17 — not pure black |
| 47 | + Chrome: Title, axis labels, tick labels, and colorbar text all in light off-white color, clearly readable against dark surface. No dark-on-dark text failures detected. |
| 48 | + Data: Viridis data colors identical to light render — same yellow peak, same teal/purple gradient. Contour labels remain white, readable in both dark background areas and on colored fill. Brand green #009E73 not applicable (sequential data uses viridis, not Okabe-Ito). |
| 49 | + Legibility verdict: PASS — all text elements readable against dark background |
| 50 | +
|
| 51 | + Code/Image Discrepancy: The code in implementations/python/plotly.py uses axis labels "X Coordinate"/"Y Coordinate" and x/y range -3 to 3, while images show "Distance East/North (km)" and 0-10 range. Code saves to plot.png/plot.html, uses template=plotly_white, and has no ANYPLOT_THEME support. Images were generated by a different code version (workflow_run 24867165978). |
49 | 52 | criteria_checklist: |
50 | 53 | visual_quality: |
51 | | - score: 38 |
52 | | - max: 40 |
| 54 | + score: 28 |
| 55 | + max: 30 |
53 | 56 | items: |
54 | 57 | - id: VQ-01 |
55 | 58 | name: Text Legibility |
56 | | - score: 10 |
57 | | - max: 10 |
| 59 | + score: 7 |
| 60 | + max: 8 |
58 | 61 | passed: true |
59 | | - comment: Title at 32pt, axis labels at 24pt, tick fonts at 18pt, contour labels |
60 | | - at 16pt - all perfectly readable |
| 62 | + comment: Title (32px), axis labels (24px), ticks (18px), colorbar readable |
| 63 | + in both themes. Contour labels slightly dense near peak center. |
61 | 64 | - id: VQ-02 |
62 | 65 | name: No Overlap |
63 | | - score: 8 |
64 | | - max: 8 |
| 66 | + score: 6 |
| 67 | + max: 6 |
65 | 68 | passed: true |
66 | | - comment: No overlapping text elements, contour labels well spaced |
| 69 | + comment: No overlapping text or chart elements in either render |
67 | 70 | - id: VQ-03 |
68 | 71 | name: Element Visibility |
69 | | - score: 8 |
70 | | - max: 8 |
| 72 | + score: 6 |
| 73 | + max: 6 |
71 | 74 | passed: true |
72 | | - comment: Filled contour regions clearly distinguishable, contour lines visible |
73 | | - with proper width |
| 75 | + comment: Filled contours clearly distinguishable, contour lines visible, both |
| 76 | + peaks clearly resolved |
74 | 77 | - id: VQ-04 |
75 | 78 | name: Color Accessibility |
76 | | - score: 5 |
77 | | - max: 5 |
| 79 | + score: 2 |
| 80 | + max: 2 |
78 | 81 | passed: true |
79 | | - comment: Viridis colormap is colorblind-safe with excellent perceptual uniformity |
| 82 | + comment: Viridis is perceptually uniform and colorblind-safe |
80 | 83 | - id: VQ-05 |
81 | | - name: Layout Balance |
82 | | - score: 5 |
83 | | - max: 5 |
| 84 | + name: Layout & Canvas |
| 85 | + score: 3 |
| 86 | + max: 4 |
84 | 87 | passed: true |
85 | | - comment: Good proportions with adequate margins, colorbar well positioned |
| 88 | + comment: Good proportions and margins. Colorbar area slightly generous but |
| 89 | + nothing cut off. |
86 | 90 | - id: VQ-06 |
87 | | - name: Axis Labels |
88 | | - score: 1 |
| 91 | + name: Axis Labels & Title |
| 92 | + score: 2 |
89 | 93 | max: 2 |
90 | 94 | passed: true |
91 | | - comment: Labels are descriptive ("X Coordinate", "Y Coordinate") but lack |
92 | | - units |
| 95 | + comment: Distance East/North (km) descriptive with units, Elevation (m) colorbar |
| 96 | + label, correct title format |
93 | 97 | - id: VQ-07 |
94 | | - name: Grid & Legend |
95 | | - score: 1 |
| 98 | + name: Palette Compliance |
| 99 | + score: 2 |
96 | 100 | max: 2 |
97 | 101 | passed: true |
98 | | - comment: No grid (appropriate for contour), colorbar serves as legend but |
99 | | - could use better title positioning |
| 102 | + comment: Sequential data uses viridis (correct). Light bg ~#FAF8F1, dark bg |
| 103 | + ~#1A1A17. Both themes correct. |
| 104 | + design_excellence: |
| 105 | + score: 12 |
| 106 | + max: 20 |
| 107 | + items: |
| 108 | + - id: DE-01 |
| 109 | + name: Aesthetic Sophistication |
| 110 | + score: 5 |
| 111 | + max: 8 |
| 112 | + passed: true |
| 113 | + comment: 'Above default: mountain terrain metaphor with real-world labels |
| 114 | + shows design intent. Professional viridis. Not exceptional.' |
| 115 | + - id: DE-02 |
| 116 | + name: Visual Refinement |
| 117 | + score: 4 |
| 118 | + max: 6 |
| 119 | + passed: true |
| 120 | + comment: 'Above default: white contour labels, clean bordered layout appropriate |
| 121 | + for contour type, well-configured colorbar' |
| 122 | + - id: DE-03 |
| 123 | + name: Data Storytelling |
| 124 | + score: 3 |
| 125 | + max: 6 |
| 126 | + passed: true |
| 127 | + comment: 'Above default: two-peak structure creates natural visual hierarchy, |
| 128 | + elevation context guides viewer' |
100 | 129 | spec_compliance: |
101 | | - score: 25 |
102 | | - max: 25 |
| 130 | + score: 15 |
| 131 | + max: 15 |
103 | 132 | items: |
104 | 133 | - id: SC-01 |
105 | 134 | name: Plot Type |
106 | | - score: 8 |
107 | | - max: 8 |
108 | | - passed: true |
109 | | - comment: Correct contour plot with filled regions and lines |
110 | | - - id: SC-02 |
111 | | - name: Data Mapping |
112 | 135 | score: 5 |
113 | 136 | max: 5 |
114 | 137 | passed: true |
115 | | - comment: X, Y, Z correctly assigned to grid coordinates and surface values |
116 | | - - id: SC-03 |
| 138 | + comment: Filled contour with overlaid contour lines — correct chart type per |
| 139 | + spec |
| 140 | + - id: SC-02 |
117 | 141 | name: Required Features |
118 | | - score: 5 |
119 | | - max: 5 |
| 142 | + score: 4 |
| 143 | + max: 4 |
120 | 144 | passed: true |
121 | | - comment: Has filled regions, contour lines, colorbar, and labeled levels as |
122 | | - spec suggests |
123 | | - - id: SC-04 |
124 | | - name: Data Range |
| 145 | + comment: Filled regions, contour lines, colorbar, contour labels, sequential |
| 146 | + colormap all present |
| 147 | + - id: SC-03 |
| 148 | + name: Data Mapping |
125 | 149 | score: 3 |
126 | 150 | max: 3 |
127 | 151 | passed: true |
128 | | - comment: Axes show full data range from -3 to 3 |
129 | | - - id: SC-05 |
130 | | - name: Legend Accuracy |
131 | | - score: 2 |
132 | | - max: 2 |
133 | | - passed: true |
134 | | - comment: Colorbar accurately represents Z values |
135 | | - - id: SC-06 |
136 | | - name: Title Format |
137 | | - score: 2 |
138 | | - max: 2 |
| 152 | + comment: X/Y grid correctly mapped, Z value encoded in color with full range |
| 153 | + represented |
| 154 | + - id: SC-04 |
| 155 | + name: Title & Legend |
| 156 | + score: 3 |
| 157 | + max: 3 |
139 | 158 | passed: true |
140 | | - comment: Correctly uses "{spec-id} · {library} · pyplots.ai" format |
| 159 | + comment: Mountain Terrain · contour-basic · plotly · anyplot.ai — contains |
| 160 | + spec-id, library, correct branding |
141 | 161 | data_quality: |
142 | | - score: 17 |
143 | | - max: 20 |
| 162 | + score: 14 |
| 163 | + max: 15 |
144 | 164 | items: |
145 | 165 | - id: DQ-01 |
146 | 166 | name: Feature Coverage |
147 | | - score: 8 |
148 | | - max: 8 |
| 167 | + score: 5 |
| 168 | + max: 6 |
149 | 169 | passed: true |
150 | | - comment: Shows both peaks and valleys, multiple local extrema, gradients, |
151 | | - and saddle-like regions - demonstrates full range of contour plot capabilities |
| 170 | + comment: 'All key contour features shown. Minor: contour level distribution |
| 171 | + slightly irregular (uneven spacing between labeled levels)' |
152 | 172 | - id: DQ-02 |
153 | 173 | name: Realistic Context |
154 | 174 | score: 5 |
155 | | - max: 7 |
156 | | - passed: false |
157 | | - comment: Mathematical function (peaks-like) is plausible for a basic contour |
158 | | - demo but generic; could represent elevation or any 2D field |
| 175 | + max: 5 |
| 176 | + passed: true |
| 177 | + comment: Mountain terrain elevation is real-world plausible and neutral. 300-1200m |
| 178 | + values realistic. |
159 | 179 | - id: DQ-03 |
160 | 180 | name: Appropriate Scale |
161 | 181 | score: 4 |
162 | | - max: 5 |
| 182 | + max: 4 |
163 | 183 | passed: true |
164 | | - comment: Values are sensible for mathematical function; 50x50 grid provides |
165 | | - smooth contours within spec range |
| 184 | + comment: 50x50 grid (within spec 20x20 to 100x100). 10km x 10km domain with |
| 185 | + elevation range sensible. |
166 | 186 | code_quality: |
167 | | - score: 10 |
| 187 | + score: 9 |
168 | 188 | max: 10 |
169 | 189 | items: |
170 | 190 | - id: CQ-01 |
171 | 191 | name: KISS Structure |
172 | 192 | score: 3 |
173 | 193 | max: 3 |
174 | 194 | passed: true |
175 | | - comment: 'Linear flow: imports → data → plot → save, no functions or classes' |
| 195 | + comment: Flat script, no functions or classes |
176 | 196 | - id: CQ-02 |
177 | 197 | name: Reproducibility |
178 | | - score: 3 |
179 | | - max: 3 |
| 198 | + score: 2 |
| 199 | + max: 2 |
180 | 200 | passed: true |
181 | | - comment: Uses np.random.seed(42) for reproducibility |
| 201 | + comment: np.random.seed(42) set |
182 | 202 | - id: CQ-03 |
183 | 203 | name: Clean Imports |
184 | 204 | score: 2 |
185 | 205 | max: 2 |
186 | 206 | passed: true |
187 | | - comment: Only numpy and plotly.graph_objects imported, both used |
| 207 | + comment: Only numpy and plotly.graph_objects imported; both used |
188 | 208 | - id: CQ-04 |
189 | | - name: No Deprecated API |
190 | | - score: 1 |
191 | | - max: 1 |
| 209 | + name: Code Elegance |
| 210 | + score: 2 |
| 211 | + max: 2 |
192 | 212 | passed: true |
193 | | - comment: Uses current Plotly API |
| 213 | + comment: Clean, straightforward structure; no fake UI elements |
194 | 214 | - id: CQ-05 |
195 | | - name: Output Correct |
196 | | - score: 1 |
| 215 | + name: Output & API |
| 216 | + score: 0 |
197 | 217 | max: 1 |
198 | | - passed: true |
199 | | - comment: Saves as plot.png and plot.html |
200 | | - library_features: |
201 | | - score: 3 |
202 | | - max: 5 |
| 218 | + passed: false |
| 219 | + comment: 'FAIL: Code saves to plot.png/plot.html (bare filenames). No ANYPLOT_THEME |
| 220 | + reading. Old pyplots.ai branding. Code does not match the images shown.' |
| 221 | + library_mastery: |
| 222 | + score: 7 |
| 223 | + max: 10 |
203 | 224 | items: |
204 | | - - id: LF-01 |
205 | | - name: Uses distinctive library features |
| 225 | + - id: LM-01 |
| 226 | + name: Idiomatic Usage |
| 227 | + score: 4 |
| 228 | + max: 5 |
| 229 | + passed: true |
| 230 | + comment: go.Contour with colorscale, showlabels, labelfont, colorbar — correct |
| 231 | + idiomatic Plotly patterns. Above default. |
| 232 | + - id: LM-02 |
| 233 | + name: Distinctive Features |
206 | 234 | score: 3 |
207 | 235 | max: 5 |
208 | 236 | passed: true |
209 | | - comment: Uses go.Contour with showlabels, colorbar customization, and HTML |
210 | | - export for interactivity; could leverage more Plotly-specific features like |
211 | | - hover info customization or animation |
| 237 | + comment: HTML export for interactivity (distinctive Plotly feature), contour |
| 238 | + label font customization, colorbar thickness/len config show library-specific |
| 239 | + knowledge. Above default. |
212 | 240 | verdict: APPROVED |
| 241 | +impl_tags: |
| 242 | + dependencies: [] |
| 243 | + techniques: |
| 244 | + - colorbar |
| 245 | + - annotations |
| 246 | + - html-export |
| 247 | + patterns: |
| 248 | + - data-generation |
| 249 | + - matrix-construction |
| 250 | + dataprep: [] |
| 251 | + styling: |
| 252 | + - custom-colormap |
0 commit comments