Skip to content

feat(makie): implement quiver-basic#9765

Merged
MarkusNeusinger merged 6 commits into
mainfrom
implementation/quiver-basic/makie
Jul 24, 2026
Merged

feat(makie): implement quiver-basic#9765
MarkusNeusinger merged 6 commits into
mainfrom
implementation/quiver-basic/makie

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Implementation: quiver-basic - julia/makie

Implements the julia/makie version of quiver-basic.

File: plots/quiver-basic/implementations/julia/makie.jl

Parent Issue: #1014


🤖 impl-generate workflow

@claude

claude Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

AI Review - Attempt 1/3

Image Description

Light render (plot-light.png): Warm off-white background (#FAF8F1). Title "quiver-basic · julia · makie · anyplot.ai" in bold dark text, clearly readable. Axis labels "X position (km)" / "Y position (km)" and tick labels readable in dark/soft-dark ink. A 20x12 grid (240 arrows) forms a cyclonic spiral pattern, colored on a continuous green-to-blue ramp (#009E73 -> #4467A3) encoding wind speed magnitude — teal-green in the slower outer band, blue in the faster eyewall spiraling around a calm core. Colorbar labeled "Wind speed (m/s)" with readable ticks. All text is readable against the light background.

Dark render (plot-dark.png): Warm near-black background (#1A1A17). Same title/axis/tick text now rendered in light ink tones, fully readable against the dark background — no dark-on-dark failures. Data colors are identical to the light render (#009E73 -> #4467A3); only the chrome (background, text, grid) flipped as expected. Colorbar label/ticks are light-colored and legible.

Both renders pass the legibility check.

Score: 89/100

Category Score Max
Visual Quality 28 30
Design Excellence 14 20
Spec Compliance 15 15
Data Quality 14 15
Code Quality 10 10
Library Mastery 8 10
Total 89 100

Visual Quality (28/30)

  • VQ-01: Text Legibility (7/8) — all font sizes explicit, readable in both themes and at mobile scale; colorbar tick labels a touch small
  • VQ-02: No Overlap (6/6) — clean layout throughout
  • VQ-03: Element Visibility (5/6) — well-adapted density, but the 1-2 arrows nearest the vortex core shrink to near-invisible slivers
  • VQ-04: Color Accessibility (2/2) — CVD-safe green-to-blue ramp
  • VQ-05: Layout & Canvas (4/4) — DataAspect + tuned limits + colsize! give a well-proportioned, balanced canvas
  • VQ-06: Axis Labels & Title (2/2) — units present on axes and colorbar
  • VQ-07: Palette Compliance (2/2) — correct Imprint sequential ramp for single-polarity magnitude data; theme-correct chrome in both renders

Design Excellence (14/20)

  • DE-01: Aesthetic Sophistication (6/8) - Custom colormap + deliberate vortex data reads clearly above defaults
  • DE-02: Visual Refinement (4/6) - Matches the anyplot style-guide baseline well, but no polish beyond it
  • DE-03: Data Storytelling (4/6) - Color + spiral shape create a clear focal point, guides the viewer

Spec Compliance (15/15)

  • SC-01: Plot Type (5/5)
  • SC-02: Required Features (4/4)
  • SC-03: Data Mapping (3/3)
  • SC-04: Title & Legend (3/3)

Data Quality (14/15)

  • DQ-01: Feature Coverage (6/6)
  • DQ-02: Realistic Context (5/5)
  • DQ-03: Appropriate Scale (3/4) — vortex shape is physically correct, but comments claim "real cyclone" while magnitudes (0.1-1.5 m/s) are far below actual cyclone wind speeds

Code Quality (10/10)

  • CQ-01: KISS Structure (3/3)
  • CQ-02: Reproducibility (2/2)
  • CQ-03: Clean Imports (2/2)
  • CQ-04: Code Elegance (2/2)
  • CQ-05: Output & API (1/1)

Library Mastery (8/10)

  • LM-01: Idiomatic Usage (5/5)
  • LM-02: Distinctive Features (3/5) - GridLayout-based Colorbar placement + DataAspect() are genuinely Makie-specific patterns

Score Caps Applied

  • None

Strengths

  • Physically-motivated Rankine vortex data (solid-body rotation core + 1/r decay outside) gives the quiver field genuine spatial structure and a clear focal point
  • Correct Imprint sequential colormap (#009E73 -> #4467A3) encodes wind speed magnitude, matching the single-polarity nature of the data, with a clearly labeled colorbar
  • All chrome is explicitly theme-tokened and reads correctly in both light and dark renders — no dark-on-dark or light-on-light failures
  • Canvas well-utilized: DataAspect() plus tuned xlims!/ylims! and colsize! keep the vector field large while the colorbar stays proportionate
  • Clean KISS code structure with explicit font sizes throughout, seeded reproducibility, and no fake interactivity

Weaknesses

  • The 1-2 grid points nearest the vortex core (r ≈ 0) render as extremely short, faint arrows that nearly disappear against the gridlines
  • Code comment claims the data "mirrors a real cyclone's wind profile," but plotted speeds only reach ~1.5 m/s — real cyclones sustain ≥17 m/s; the vortex shape is right but the numeric scale undersells the claimed phenomenon
  • Visual refinement matches the standard anyplot style-guide baseline without additional intentional polish beyond it
  • Data storytelling is solid but stops short of "excellent" — one more deliberate emphasis technique on the eyewall band would sharpen the insight

Issues Found

  1. VQ-03 MEDIUM: Arrows at the 1-2 grid points nearest the vortex core (near-zero speed) are nearly invisible
    • Fix: floor the effective arrow length (e.g. max(magnitude, some_min) fed into the length calculation only) so no vector visually vanishes, while keeping color mapped to the true magnitude
  2. DQ-03 LOW: Comment claims cyclone realism but magnitudes (0.1–1.5 m/s) are far below real cyclone wind speeds
    • Fix: scale v_max up to a genuine tropical-storm/hurricane range (e.g. ~25-40 m/s), or soften the comment to describe a local wind eddy instead of a cyclone
  3. DE-02 LOW: Visual refinement doesn't go beyond the standard anyplot baseline recipe
    • Fix: consider a subtle extra touch such as suppressing colorbar minor ticks or lightly emphasizing the eyewall band to add another layer of polish

AI Feedback for Next Attempt

Score is strong overall (89/100) but just under this attempt's 90 threshold. To push over the line: (1) fix the near-invisible arrows at the vortex core with a minimum length floor, (2) either scale wind magnitudes up to real storm-force values or soften the "cyclone" comment since 0.1-1.5 m/s reads as a gentle breeze, and (3) add one or two more intentional design touches (e.g. colorbar tick styling, eyewall emphasis) to lift Design Excellence beyond the standard baseline recipe.

Verdict: REJECTED

@github-actions github-actions Bot added quality:89 Quality score 89/100 ai-rejected Quality not OK, triggers update labels Jul 24, 2026
@github-actions github-actions Bot added ai-attempt-1 First repair attempt and removed ai-rejected Quality not OK, triggers update labels Jul 24, 2026
Attempt 1/4 - fixes based on AI review
@github-actions

Copy link
Copy Markdown
Contributor Author

🔧 Repair Attempt 1/4

Applied fixes based on AI review feedback.

Status: Repair completed, re-triggering review...


🤖 impl-repair

@claude

claude Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

AI Review - Attempt 2/3

Image Description

Light render (plot-light.png): Warm off-white (#FAF8F1) background. Title "quiver-basic · julia · makie · anyplot.ai" in bold dark ink, clearly visible. Axis labels "X position (km)" / "Y position (km)" and tick labels are legible dark/gray ink against the light surface. 240 arrows on a 20x12 grid form a clear cyclonic rotation pattern — short/calm arrows near the origin, a fast ring around the core, straightening toward the edges. Arrow color runs teal-green (#009E73) to blue (#4467A3) via the Imprint sequential colormap, encoding true wind speed. A colorbar labeled "Wind speed (m/s)" sits to the right. All text is readable against the light background.

Dark render (plot-dark.png): Warm near-black (#1A1A17) background. Same title, axis labels, and colorbar rendered in light ink — clearly legible, no dark-on-dark issues anywhere. The arrow field, colors, and rotational pattern are pixel-identical to the light render; only chrome (background, text, gridlines, spines) has flipped. All text is readable against the dark background.

Both renders pass the theme-readability check; no legibility failures in either theme.

Score: 89/100

Category Score Max
Visual Quality 30 30
Design Excellence 13 20
Spec Compliance 14 15
Data Quality 15 15
Code Quality 10 10
Library Mastery 7 10
Total 89 100

Visual Quality (30/30)

  • VQ-01: Text Legibility (8/8)
  • VQ-02: No Overlap (6/6)
  • VQ-03: Element Visibility (6/6)
  • VQ-04: Color Accessibility (2/2)
  • VQ-05: Layout & Canvas (4/4)
  • VQ-06: Axis Labels & Title (2/2)
  • VQ-07: Palette Compliance (2/2)

Design Excellence (13/20)

  • DE-01: Aesthetic Sophistication (6/8) - Physically-motivated Rankine vortex model + dual color/length encoding
  • DE-02: Visual Refinement (4/6) - Spines removed, subtle grid, generous whitespace
  • DE-03: Data Storytelling (3/6) - Eyewall dashed ring intended to sharpen the story is not actually visible in either render

Spec Compliance (14/15)

  • SC-01: Plot Type (5/5)
  • SC-02: Required Features (3/4) - x/y/u/v present, but displayed length is floored near the calm core so it's not strictly proportional to magnitude there
  • SC-03: Data Mapping (3/3)
  • SC-04: Title & Legend (3/3)

Data Quality (15/15)

  • DQ-01: Feature Coverage (6/6)
  • DQ-02: Realistic Context (5/5)
  • DQ-03: Appropriate Scale (4/4)

Code Quality (10/10)

  • CQ-01: KISS Structure (3/3)
  • CQ-02: Reproducibility (2/2)
  • CQ-03: Clean Imports (2/2)
  • CQ-04: Code Elegance (2/2)
  • CQ-05: Output & API (1/1)

Library Mastery (7/10)

  • LM-01: Idiomatic Usage (4/5)
  • LM-02: Distinctive Features (3/5) - Colorbar built from the arrows! plot object, DataAspect for correct vortex geometry

Score Caps Applied

  • None

Strengths

  • Physically-motivated data: a Rankine vortex model (solid-body rotation inside the eyewall, 1/r decay outside, v_max=33 m/s pegged to the Category-1 hurricane threshold) replaces a toy rotation formula.
  • Thoughtful dual encoding: arrow color always maps to the true, unfloored speed while displayed arrow length is gently floored near the calm core so the slowest points don't shrink to invisible slivers.
  • aspect = DataAspect() correctly preserves the vortex's circular symmetry — verified by cropping into the core; the rotational flow renders as a true circle, not squashed into an ellipse.
  • Idiomatic Makie composition: the Colorbar is built directly from the arrows! plot object, and every theme token is threaded consistently through Figure, Axis, and Colorbar.
  • Correct palette compliance: two-stop Imprint sequential colormap for continuous wind-speed data, correct #FAF8F1/#1A1A17 backgrounds, data colors pixel-identical between light and dark.

Weaknesses

  • The dashed eyewall ring at r=3 (intended per the code comment to "sharpen the storytelling") is effectively invisible in both renders — alpha=0.35 with linewidth=1.2 gets lost among the densely-packed colored arrows. Either raise its contrast/opacity/linewidth so it actually reads, or drop it.
  • Displayed arrow length is floored at 0.18*v_max near the calm core, so length stops being strictly proportional to magnitude there (color carries that signal instead) — a reasonable readability tradeoff, but worth being explicit about relative to the spec's "length proportional to magnitude" guidance.
  • Design Excellence has headroom: no additional framing (e.g. a labeled eye/eyewall annotation, a compass/scale cue) elevates the storytelling beyond the color+rotation pattern itself.

Issues Found

  1. DE-03 LOW: Eyewall ring meant to reinforce the storytelling doesn't render visibly
    • Fix: Increase ring alpha (e.g. 0.5-0.6) and/or linewidth (e.g. 1.8-2.0), or use a slightly different hue so it reads clearly against the arrow field in both themes.
  2. SC-02 MINOR: Arrow length near the calm core is floored rather than truly proportional to magnitude
    • Fix: Either keep the current floor (acceptable tradeoff, already well-commented) or narrow the floor's radius/magnitude so more of the field encodes true proportional length, relying on color only for the smallest handful of near-zero vectors.

AI Feedback for Next Attempt

Solid implementation — no repair strictly required. If revisiting: make the eyewall-radius ring actually visible (it currently renders invisibly) and/or add one small annotation (e.g. "eyewall" label near r=3) to fully realize the storytelling the code comments already describe.

Verdict: APPROVED

@github-actions github-actions Bot added the ai-approved Quality OK, ready for merge label Jul 24, 2026
@MarkusNeusinger
MarkusNeusinger merged commit 8c14324 into main Jul 24, 2026
3 checks passed
@MarkusNeusinger
MarkusNeusinger deleted the implementation/quiver-basic/makie branch July 24, 2026 18:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-approved Quality OK, ready for merge ai-attempt-1 First repair attempt quality:89 Quality score 89/100

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant