Skip to content

Commit c7fba2e

Browse files
chore(bokeh): update quality score 84 and review feedback for stereonet-equal-area
1 parent d67ea0b commit c7fba2e

2 files changed

Lines changed: 91 additions & 75 deletions

File tree

plots/stereonet-equal-area/implementations/bokeh.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
stereonet-equal-area: Structural Geology Stereonet (Equal-Area Projection)
33
Library: bokeh 3.9.0 | Python 3.14.3
4-
Quality: 75/100 | Created: 2026-03-15
4+
Quality: 84/100 | Created: 2026-03-15
55
"""
66

77
import numpy as np
Lines changed: 89 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
library: bokeh
22
specification_id: stereonet-equal-area
33
created: '2026-03-15T22:59:30Z'
4-
updated: '2026-03-15T23:03:33Z'
4+
updated: '2026-03-15T23:16:25Z'
55
generated_by: claude-opus-4-5-20251101
66
workflow_run: 23121188869
77
issue: 4576
@@ -10,122 +10,133 @@ library_version: 3.9.0
1010
preview_url: https://storage.googleapis.com/pyplots-images/plots/stereonet-equal-area/bokeh/plot.png
1111
preview_thumb: https://storage.googleapis.com/pyplots-images/plots/stereonet-equal-area/bokeh/plot_thumb.png
1212
preview_html: https://storage.googleapis.com/pyplots-images/plots/stereonet-equal-area/bokeh/plot.html
13-
quality_score: 75
13+
quality_score: 84
1414
review:
1515
strengths:
16-
- Correct equal-area projection math with proper pole and great circle computations
17-
- Good colorblind-safe palette (blue/orange/purple) with appropriate alpha blending
18-
on great circles
19-
- Realistic geological data with three well-differentiated structural feature types
20-
- Clean stereonet presentation with hidden axes, styled tick marks, and cardinal
21-
direction labels
16+
- 'Full spec compliance: all required features including grid lines, density overlay,
17+
and degree labels'
18+
- 'Excellent Bokeh-specific features: HoverTool, interactive legend, image_rgba,
19+
HTML export'
20+
- Clean removal of matplotlib dependency — density rendered natively with Bokeh
21+
image_rgba
22+
- Well-chosen colorblind-safe palette with intentional visual hierarchy
23+
- Correct equal-area projection math throughout
2224
weaknesses:
23-
- Missing stereonet grid lines (equal-area net) required by spec
24-
- Legend too small and isolated in far upper-right corner
25-
- Title and text sizes appear small relative to 3600px canvas
26-
- Density contours too faint to communicate clustering
27-
- No degree labels around perimeter
28-
- Relies on matplotlib for contour extraction instead of Bokeh-native approach
29-
- Does not leverage distinctive Bokeh features (HoverTool, interactive legend)
30-
image_description: 'The plot shows a Schmidt equal-area (lower-hemisphere) stereonet
31-
rendered as a circle with N at top, S at bottom, E at right, W at left. Three
32-
geological feature types are displayed: Bedding (blue #306998 poles clustered
33-
in the NW quadrant with great circles sweeping across the net), Joints (orange
34-
#E8833A poles near the S edge with great circles extending E-W), and Faults (purple
35-
#8B5CF6 poles clustered in the SW quadrant with great circles arcing NW-SE). Tick
36-
marks appear every 10 degrees around the perimeter with thicker marks at cardinal
37-
directions. Dotted gray density contour lines are faintly visible around the Faults
38-
pole cluster. The title "stereonet-equal-area · bokeh · pyplots.ai" is at the
39-
top. A small legend with colored dots and labels sits in the upper-right corner.
40-
The background is white with no axes or grid visible. The stereonet circle fills
41-
roughly 60% of the 3600x3600 canvas.'
25+
- KDE density heatmap overlay too faint — grayish shading barely visible, fails
26+
to communicate clustering density
27+
- Nested Python for-loop for RGBA construction is slow and verbose — should be vectorized
28+
with numpy
29+
- Great circles create visual clutter in dense areas at alpha=0.4
30+
- Design needs stronger density visualization to reach publication quality
31+
image_description: 'The plot shows a lower-hemisphere equal-area (Schmidt net) stereonet
32+
rendered as a circle on a white 3600x3600 canvas. N is at the top, S at bottom,
33+
E at right, W at left, each in bold dark text (N is larger at ~38pt). Degree labels
34+
appear every 30 degrees around the perimeter (30, 60, 120, etc.) in gray. Tick
35+
marks are drawn every 10 degrees with thicker marks at cardinal and 30-degree
36+
intervals. Inside the primitive circle, subtle light gray grid lines form small
37+
circles at 10-degree dip intervals and great circle arcs at 30-degree azimuth
38+
intervals. Three geological feature types are plotted: Bedding (blue #306998,
39+
~40 measurements clustered in the NW quadrant), Joints (orange #E8833A, clustered
40+
near the S-SE region), and Faults (purple #8B5CF6, clustered in the SW quadrant).
41+
Both great circles (semi-transparent, alpha=0.4) and poles (solid dots with white
42+
edges, size=22) are shown for each type. A grayish KDE density heatmap overlay
43+
is faintly visible behind the pole clusters. A styled legend in the upper-right
44+
corner lists all three types. The title is centered at top, with an italic subtitle
45+
at bottom describing the projection type.'
4246
criteria_checklist:
4347
visual_quality:
44-
score: 23
48+
score: 26
4549
max: 30
4650
items:
4751
- id: VQ-01
4852
name: Text Legibility
49-
score: 5
53+
score: 7
5054
max: 8
5155
passed: true
52-
comment: Font sizes explicitly set but appear small at 3600px canvas; legend
53-
barely readable
56+
comment: 'All font sizes explicitly set: title 38pt, N 38pt, cardinals 30pt,
57+
degree labels 18pt, legend 26pt. Degree labels slightly small for 3600px
58+
but readable'
5459
- id: VQ-02
5560
name: No Overlap
5661
score: 6
5762
max: 6
5863
passed: true
59-
comment: No overlapping text or data elements
64+
comment: No overlapping text; all labels cleanly separated
6065
- id: VQ-03
6166
name: Element Visibility
62-
score: 5
67+
score: 4
6368
max: 6
6469
passed: true
65-
comment: Poles and great circles visible; density contours very faint
70+
comment: Poles visible at size=22 with white edge; great circles create clutter
71+
in dense areas; KDE density heatmap too faint
6672
- id: VQ-04
6773
name: Color Accessibility
6874
score: 4
6975
max: 4
7076
passed: true
71-
comment: Blue/orange/purple palette is colorblind-safe
77+
comment: Blue/orange/purple palette is colorblind-safe with excellent contrast
7278
- id: VQ-05
7379
name: Layout & Canvas
74-
score: 2
80+
score: 3
7581
max: 4
76-
passed: false
77-
comment: Legend isolated in upper-right; some wasted whitespace
82+
passed: true
83+
comment: Square format correct; net fills ~60% of canvas; slight wasted space
84+
below subtitle
7885
- id: VQ-06
7986
name: Axis Labels & Title
80-
score: 1
87+
score: 2
8188
max: 2
82-
passed: false
83-
comment: Cardinal directions present but no degree markings around perimeter
89+
passed: true
90+
comment: Cardinal directions and degree labels serve as orientation; descriptive
91+
title and subtitle
8492
design_excellence:
85-
score: 11
93+
score: 12
8694
max: 20
8795
items:
8896
- id: DE-01
8997
name: Aesthetic Sophistication
90-
score: 4
98+
score: 5
9199
max: 8
92-
passed: false
93-
comment: Custom palette and alpha blending; well-configured but not exceptional
100+
passed: true
101+
comment: Custom palette, alpha-blended great circles, styled legend — above
102+
defaults but not publication-quality
94103
- id: DE-02
95104
name: Visual Refinement
96105
score: 4
97106
max: 6
98107
passed: true
99-
comment: Axes/grid hidden, outline removed, styled tick marks — good refinement
108+
comment: Axes hidden, custom grid, outline removed, tick marks with varying
109+
weight, styled legend background
100110
- id: DE-03
101111
name: Data Storytelling
102112
score: 3
103113
max: 6
104-
passed: false
105-
comment: Clustering patterns visible but contours too faint to tell density
106-
story
114+
passed: true
115+
comment: Three distinct clusters visible with visual hierarchy; density overlay
116+
too faint to highlight preferred orientations
107117
spec_compliance:
108-
score: 14
118+
score: 15
109119
max: 15
110120
items:
111121
- id: SC-01
112122
name: Plot Type
113123
score: 5
114124
max: 5
115125
passed: true
116-
comment: Correct equal-area lower-hemisphere projection
126+
comment: Correct lower-hemisphere equal-area Schmidt net projection
117127
- id: SC-02
118128
name: Required Features
119-
score: 3
129+
score: 4
120130
max: 4
121-
passed: false
122-
comment: Missing stereonet grid lines (equal-area net) specified in spec
131+
passed: true
132+
comment: 'All features present: great circles, poles, grid lines, density
133+
overlay, tick marks, degree labels, legend'
123134
- id: SC-03
124135
name: Data Mapping
125136
score: 3
126137
max: 3
127138
passed: true
128-
comment: Strike/dip correctly converted to equal-area projection
139+
comment: Strike/dip correctly projected to equal-area coordinates
129140
- id: SC-04
130141
name: Title & Legend
131142
score: 3
@@ -141,20 +152,20 @@ review:
141152
score: 5
142153
max: 6
143154
passed: true
144-
comment: Three distinct feature types with different orientations and dip
145-
angles
155+
comment: Three feature types with different orientations and dip angles; good
156+
clustering variation
146157
- id: DQ-02
147158
name: Realistic Context
148159
score: 5
149160
max: 5
150161
passed: true
151-
comment: Realistic structural geology field measurements
162+
comment: Realistic structural geology field measurement scenario
152163
- id: DQ-03
153164
name: Appropriate Scale
154165
score: 4
155166
max: 4
156167
passed: true
157-
comment: Strike 0-360°, dip 5-89° — proper geological ranges
168+
comment: Strike 0-360, dip 5-89 — proper geological ranges
158169
code_quality:
159170
score: 9
160171
max: 10
@@ -170,7 +181,7 @@ review:
170181
score: 2
171182
max: 2
172183
passed: true
173-
comment: np.random.seed(42) set
184+
comment: np.random.seed(42) set at start
174185
- id: CQ-03
175186
name: Clean Imports
176187
score: 2
@@ -181,47 +192,52 @@ review:
181192
name: Code Elegance
182193
score: 1
183194
max: 2
184-
passed: false
185-
comment: Matplotlib import for contour extraction adds complexity
195+
passed: true
196+
comment: Double nested for-loop for RGBA construction is verbose; should be
197+
vectorized
186198
- id: CQ-05
187199
name: Output & API
188200
score: 1
189201
max: 1
190202
passed: true
191-
comment: Saves plot.png and plot.html
203+
comment: Saves plot.png and plot.html; current API
192204
library_mastery:
193-
score: 4
205+
score: 8
194206
max: 10
195207
items:
196208
- id: LM-01
197209
name: Idiomatic Usage
198-
score: 3
210+
score: 4
199211
max: 5
200-
passed: false
201-
comment: Correct Bokeh patterns but relies on matplotlib for contour extraction
212+
passed: true
213+
comment: Uses ColumnDataSource, multi_line, scatter, Label, Legend, image_rgba
214+
— proper Bokeh patterns
202215
- id: LM-02
203216
name: Distinctive Features
204-
score: 1
217+
score: 4
205218
max: 5
206-
passed: false
207-
comment: Generic usage; Bokeh used as basic renderer without HoverTool or
208-
interactive features
219+
passed: true
220+
comment: HoverTool, interactive legend click_policy, image_rgba, HTML export
221+
— distinctively Bokeh
209222
verdict: REJECTED
210223
impl_tags:
211224
dependencies:
212225
- scipy
213226
techniques:
214-
- annotations
215-
- custom-legend
216227
- polar-projection
228+
- hover-tooltips
229+
- custom-legend
230+
- annotations
217231
- html-export
218232
patterns:
219233
- data-generation
220234
- iteration-over-groups
221235
- columndatasource
236+
- matrix-construction
222237
dataprep:
223238
- kde
224239
styling:
225240
- minimal-chrome
226241
- alpha-blending
242+
- grid-styling
227243
- edge-highlighting

0 commit comments

Comments
 (0)