Skip to content

Commit 24c4667

Browse files
chore(matplotlib): add metadata for network-force-directed
1 parent 31668c1 commit 24c4667

1 file changed

Lines changed: 11 additions & 240 deletions

File tree

Lines changed: 11 additions & 240 deletions
Original file line numberDiff line numberDiff line change
@@ -1,250 +1,21 @@
1+
# Per-library metadata for matplotlib implementation of network-force-directed
2+
# Auto-generated by impl-generate.yml
3+
14
library: matplotlib
25
language: python
36
specification_id: network-force-directed
47
created: '2025-12-23T15:14:17Z'
5-
updated: '2026-04-26T08:47:45Z'
6-
generated_by: claude-opus
7-
workflow_run: 24952381723
8+
updated: '2026-07-01T01:15:35Z'
9+
generated_by: claude-sonnet
10+
workflow_run: 28486437476
811
issue: 990
9-
python_version: 3.14.4
10-
library_version: 3.10.9
12+
language_version: 3.13.14
13+
library_version: 3.11.0
1114
preview_url_light: https://storage.googleapis.com/anyplot-images/plots/network-force-directed/python/matplotlib/plot-light.png
1215
preview_url_dark: https://storage.googleapis.com/anyplot-images/plots/network-force-directed/python/matplotlib/plot-dark.png
1316
preview_html_light: null
1417
preview_html_dark: null
15-
quality_score: 85
18+
quality_score: null
1619
review:
17-
strengths:
18-
- 'Perfect spec and data quality: realistic company social network with clear community
19-
structure, degree-based hub sizing, hub labeling, and bridge edges — all spec
20-
features implemented'
21-
- Force-directed Fruchterman-Reingold layout implemented from scratch with correct
22-
repulsive/attractive forces and temperature cooling
23-
- 'Efficient matplotlib idioms: LineCollection for O(1) edge batch rendering, custom
24-
legend handles, theme-adaptive chrome throughout both renders'
25-
- Both renders pass theme-readability checks with no dark-on-dark or light-on-light
26-
failures
27-
weaknesses:
28-
- Hub label fontsize (14pt) is below the 16pt minimum for secondary text at 4800x2700
29-
resolution; footer fontsize (12pt) is too small — both should be increased
30-
- DE-01 design sophistication is solid but not exceptional; could differentiate
31-
bridge edges (e.g., dashed or different opacity) from intra-community edges to
32-
add another layer of visual storytelling
33-
- LM-02 could leverage more distinctly matplotlib capabilities (e.g., FancyArrowPatch,
34-
PathPatch for curved edges, or inset_axes for a degree distribution inset)
35-
image_description: |-
36-
Light render (plot-light.png):
37-
Background: Warm off-white (~#FAF8F1) — correct theme surface, not pure white
38-
Chrome: Title "network-force-directed · matplotlib · anyplot.ai" in dark ink, clearly readable; legend with "Teams" title readable; hub annotation labels readable; footer readable (but small at 12pt)
39-
Data: Three communities — Engineering (#009E73 teal, right), Marketing (#D55E00 orange, lower center-left), Sales (#0072B2 blue, upper left); nodes sized by degree with hub nodes visibly larger; edges in muted gray at alpha=0.30
40-
Legibility verdict: PASS (hub labels at 14pt and footer at 12pt are slightly below 16pt/14pt guidelines but still readable)
41-
42-
Dark render (plot-dark.png):
43-
Background: Warm near-black (~#1A1A17) — correct dark theme surface, not pure black
44-
Chrome: Title in light-colored text readable against dark background; legend background is elevated dark surface (#242420); legend text and annotations adapt to light chrome; no dark-on-dark failures detected
45-
Data: Colors identical to light render — Engineering #009E73, Marketing #D55E00, Sales #0072B2 — confirming Okabe-Ito positions 1-3 are theme-invariant; node sizing identical
46-
Legibility verdict: PASS
47-
criteria_checklist:
48-
visual_quality:
49-
score: 25
50-
max: 30
51-
items:
52-
- id: VQ-01
53-
name: Text Legibility
54-
score: 6
55-
max: 8
56-
passed: true
57-
comment: Title 24pt, legend 16pt/18pt explicitly set; hub labels 14pt below
58-
16pt minimum; footer 12pt too small for 4800x2700
59-
- id: VQ-02
60-
name: No Overlap
61-
score: 5
62-
max: 6
63-
passed: true
64-
comment: Hub labels per community are adjacent but readable; no severe overlap
65-
- id: VQ-03
66-
name: Element Visibility
67-
score: 5
68-
max: 6
69-
passed: true
70-
comment: Nodes well-sized with degree scaling; edges at alpha=0.30 intentionally
71-
faint but visible
72-
- id: VQ-04
73-
name: Color Accessibility
74-
score: 2
75-
max: 2
76-
passed: true
77-
comment: Okabe-Ito positions 1-3 are colorblind-safe with good luminance contrast
78-
- id: VQ-05
79-
name: Layout & Canvas
80-
score: 3
81-
max: 4
82-
passed: true
83-
comment: Three-cluster layout uses canvas well; minor imbalance with empty
84-
space in lower-right quadrant
85-
- id: VQ-06
86-
name: Axis Labels & Title
87-
score: 2
88-
max: 2
89-
passed: true
90-
comment: Title in correct format; axis off is appropriate for network; footer
91-
provides context
92-
- id: VQ-07
93-
name: Palette Compliance
94-
score: 2
95-
max: 2
96-
passed: true
97-
comment: 'First series #009E73; Okabe-Ito positions 1-3 in order; backgrounds
98-
#FAF8F1/#1A1A17; chrome adapts correctly'
99-
design_excellence:
100-
score: 13
101-
max: 20
102-
items:
103-
- id: DE-01
104-
name: Aesthetic Sophistication
105-
score: 5
106-
max: 8
107-
passed: true
108-
comment: Node edges set to page background for clean definition; degree-based
109-
sizing adds hierarchy; hub labels with rounded boxes; above default but
110-
not exceptional
111-
- id: DE-02
112-
name: Visual Refinement
113-
score: 4
114-
max: 6
115-
passed: true
116-
comment: ax.axis('off') gives clean frameless look; custom legend frame with
117-
adaptive colors; edge alpha=0.30 reduces noise; solid refinement
118-
- id: DE-03
119-
name: Data Storytelling
120-
score: 4
121-
max: 6
122-
passed: true
123-
comment: Hub nodes prominent via size; labels direct viewer to key connectors;
124-
community clusters immediately visible; bridge edges reveal structure
125-
spec_compliance:
126-
score: 15
127-
max: 15
128-
items:
129-
- id: SC-01
130-
name: Plot Type
131-
score: 5
132-
max: 5
133-
passed: true
134-
comment: Force-directed graph implemented from scratch (Fruchterman-Reingold);
135-
correct layout behavior
136-
- id: SC-02
137-
name: Required Features
138-
score: 4
139-
max: 4
140-
passed: true
141-
comment: Nodes with IDs, edges, degree-based node sizing, hub labels, 200
142-
iterations for convergence — all present
143-
- id: SC-03
144-
name: Data Mapping
145-
score: 3
146-
max: 3
147-
passed: true
148-
comment: 50 nodes, 133 edges, 3 communities; intra/inter-community connections
149-
correctly represented
150-
- id: SC-04
151-
name: Title & Legend
152-
score: 3
153-
max: 3
154-
passed: true
155-
comment: Title 'network-force-directed · matplotlib · anyplot.ai'; legend
156-
shows Teams with Engineering/Marketing/Sales
157-
data_quality:
158-
score: 15
159-
max: 15
160-
items:
161-
- id: DQ-01
162-
name: Feature Coverage
163-
score: 6
164-
max: 6
165-
passed: true
166-
comment: Shows community clustering, degree variation, hub identification,
167-
bridge edges, density contrast
168-
- id: DQ-02
169-
name: Realistic Context
170-
score: 5
171-
max: 5
172-
passed: true
173-
comment: Company social network (Engineering, Marketing, Sales) — real-world
174-
neutral scenario
175-
- id: DQ-03
176-
name: Appropriate Scale
177-
score: 4
178-
max: 4
179-
passed: true
180-
comment: 50 nodes (within 20-200 spec range), 133 edges, realistic department
181-
sizes (18/17/15)
182-
code_quality:
183-
score: 10
184-
max: 10
185-
items:
186-
- id: CQ-01
187-
name: KISS Structure
188-
score: 3
189-
max: 3
190-
passed: true
191-
comment: 'Flat: imports → tokens → data → layout → plot → save; no functions
192-
or classes'
193-
- id: CQ-02
194-
name: Reproducibility
195-
score: 2
196-
max: 2
197-
passed: true
198-
comment: np.random.seed(42) set before any random operation
199-
- id: CQ-03
200-
name: Clean Imports
201-
score: 2
202-
max: 2
203-
passed: true
204-
comment: All four imports (os, matplotlib.pyplot, numpy, LineCollection) are
205-
used
206-
- id: CQ-04
207-
name: Code Elegance
208-
score: 2
209-
max: 2
210-
passed: true
211-
comment: Clean, Pythonic; O(n²) FR loops are the algorithm; no fake UI elements
212-
- id: CQ-05
213-
name: Output & API
214-
score: 1
215-
max: 1
216-
passed: true
217-
comment: Saves as plot-{THEME}.png with dpi=300; no deprecated API
218-
library_mastery:
219-
score: 7
220-
max: 10
221-
items:
222-
- id: LM-01
223-
name: Idiomatic Usage
224-
score: 4
225-
max: 5
226-
passed: true
227-
comment: LineCollection for batch edge rendering; empty-scatter custom legend
228-
handle; plt.setp for batch text styling; fig.text for footer
229-
- id: LM-02
230-
name: Distinctive Features
231-
score: 3
232-
max: 5
233-
passed: true
234-
comment: LineCollection and empty-scatter legend pattern are distinctly matplotlib;
235-
could go further with FancyArrowPatch or PathPatch for curved edges
236-
verdict: REJECTED
237-
impl_tags:
238-
dependencies: []
239-
techniques:
240-
- annotations
241-
- custom-legend
242-
patterns:
243-
- data-generation
244-
- iteration-over-groups
245-
- explicit-figure
246-
dataprep: []
247-
styling:
248-
- minimal-chrome
249-
- alpha-blending
250-
- edge-highlighting
20+
strengths: []
21+
weaknesses: []

0 commit comments

Comments
 (0)