Skip to content

feat(seaborn): implement bar-3d-categorical#6791

Merged
MarkusNeusinger merged 6 commits into
mainfrom
implementation/bar-3d-categorical/seaborn
May 15, 2026
Merged

feat(seaborn): implement bar-3d-categorical#6791
MarkusNeusinger merged 6 commits into
mainfrom
implementation/bar-3d-categorical/seaborn

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

Implementation: bar-3d-categorical - python/seaborn

Implements the python/seaborn version of bar-3d-categorical.

File: plots/bar-3d-categorical/implementations/python/seaborn.py

Parent Issue: #5248


🤖 impl-generate workflow

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented May 15, 2026

AI Review - Attempt 1/3

Image Description

Light render (plot-light.png): The plot renders on a warm off-white #FAF8F1 background. A 3D bar chart displays 16 bars (4 products × 4 regions) with axes for Region (y: North/South/East/West), Product Category (x: Laptops/Tablets/Phones/Monitors), and Units Sold (z). Bars are colored using the Okabe-Ito palette: Laptops in #009E73 (brand green), Tablets in #D55E00 (orange), Phones in #0072B2 (blue), Monitors in #CC79A7 (pink). Value labels appear at the top of bars, though several are partially occluded by taller bars in the foreground due to 3D perspective. The legend sits in the upper left with a "Product" title. The title "bar-3d-categorical · seaborn · anyplot.ai" is clearly readable with dark text. All text is readable against the light background. Pane walls are transparent with subtle edges.

Dark render (plot-dark.png): The same chart renders on a near-black #1A1A17 background. Data colors are identical to the light render — Okabe-Ito green, orange, blue, and pink bars. Title, axis labels, tick labels, and legend text all appear in light colors (#F0EFE8 / #B8B7B0 range) and are readable against the dark background. No dark-on-dark text failures observed. The pane edges render in lighter tones matching the dark theme. The INK token correctly flips to #F0EFE8 in dark mode, ensuring value label text (using color=INK) is also light. Both renders pass the theme-readability check.

Both paragraphs are required. A review that only describes one render is invalid.

Score: 77/100

Category Score Max
Visual Quality 24 30
Design Excellence 11 20
Spec Compliance 15 15
Data Quality 14 15
Code Quality 10 10
Library Mastery 3 10
Total 77 100

Visual Quality (24/30)

  • VQ-01: Text Legibility (6/8) — All sizes explicitly set, but below recommended minimums: title 22pt (≥24 required), axis labels 18pt (≥20 required), tick labels 14pt (≥16 required). Value labels at 11pt are small for a 4800×2700 render.
  • VQ-02: No Overlap (4/6) — Several value labels are occluded by foreground bars due to 3D perspective. Only a subset of labels is visible in either render (notably "46" on East/Laptops). While some occlusion is inherent to 3D, it reduces readability.
  • VQ-03: Element Visibility (5/6) — Bars are well-sized with good alpha (0.85) and shade=True providing depth cues. Minor depth-perception ambiguity in back rows.
  • VQ-04: Color Accessibility (2/2) — Okabe-Ito palette is CVD-safe; good luminance contrast between adjacent bar colors.
  • VQ-05: Layout & Canvas (3/4) — Chart fills a reasonable portion of canvas; some unused space to the right, but 3D perspective naturally affects canvas utilization. Legend is well-placed.
  • VQ-06: Axis Labels & Title (2/2) — Z-axis labeled "Units Sold (thousands)" with units; X/Y axes descriptive.
  • VQ-07: Palette Compliance (2/2) — First series (Laptops) correctly uses #009E73; Tablets #D55E00, Phones #0072B2, Monitors #CC79A7 — canonical Okabe-Ito order. Background #FAF8F1 (light) / #1A1A17 (dark). Full compliance.

Design Excellence (11/20)

  • DE-01: Aesthetic Sophistication (5/8) — Above library defaults: custom Okabe-Ito palette, transparent pane walls, theme-adaptive chrome, value labels. Not quite publication-ready but clearly thoughtful.
  • DE-02: Visual Refinement (4/6) — Transparent pane backgrounds with fill = False, subtle edge colors, good whitespace. Better than the matplotlib 3D default, though no spine removal or grid customization (not directly applicable to 3D axes).
  • DE-03: Data Storytelling (2/6) — Data is displayed but viewer must discover the insight (Phones dominate across all regions, Monitors are lowest). No visual emphasis, no focal point, no hierarchy guiding the eye.

Spec Compliance (15/15)

  • SC-01: Plot Type (5/5) — Correct 3D bar chart with bars rising from a 2D categorical grid.
  • SC-02: Required Features (4/4) — Spacing between bars (bar_w=0.55), color encoding product category, correct view angle (elev=30, azim=45), value labels (grid <25 bars), legend.
  • SC-03: Data Mapping (3/3) — Products on X, regions on Y, sales on Z. All 16 data points visible.
  • SC-04: Title & Legend (3/3) — Title format bar-3d-categorical · seaborn · anyplot.ai ✓. Legend "Product" with all 4 product labels ✓.

Data Quality (14/15)

  • DQ-01: Feature Coverage (5/6) — Shows variation across both categorical dimensions. Could have more dramatic inter-product contrast for better feature demonstration.
  • DQ-02: Realistic Context (5/5) — Quarterly tech product sales by region; neutral, comprehensible business scenario.
  • DQ-03: Appropriate Scale (4/4) — Values 11–73K units are plausible for product sales across regions with realistic ordering (Phones > Laptops > Tablets > Monitors).

Code Quality (10/10)

  • CQ-01: KISS Structure (3/3) — Linear: imports → tokens → data → plot → style → save. No functions or classes.
  • CQ-02: Reproducibility (2/2) — np.random.seed(42) set.
  • CQ-03: Clean Imports (2/2) — All imports (os, mpatches, plt, np, sns) are used.
  • CQ-04: Code Elegance (2/2) — Clean Pythonic code, no fake UI, appropriate complexity.
  • CQ-05: Output & API (1/1) — Saves as plot-{THEME}.png with correct DPI and facecolor.

Library Mastery (3/10)

  • LM-01: Idiomatic Usage (2/5) — Seaborn does not support 3D plots. The implementation uses ax.bar3d() from matplotlib's mpl_toolkits.mplot3d directly. Seaborn is only used for sns.set_theme() (styling) — no seaborn plot functions (sns.barplot, etc.) are called. This is not idiomatic seaborn usage.
  • LM-02: Distinctive Features (1/5) — No seaborn-distinctive features. The 3D bar chart is pure matplotlib. The theming integration is correct but unremarkable.

Score Caps Applied

  • None applied. All individual category caps are above achieved scores.

Strengths

  • Perfect spec compliance — all required features implemented (view angle, spacing, value labels, legend, grid lines)
  • Correct full Okabe-Ito palette with properly theme-adaptive chrome in both light and dark renders
  • Clean, reproducible code with all font sizes explicitly set
  • Realistic and neutral business context (tech product sales data)

Weaknesses

  • Seaborn barely used — only sns.set_theme() for styling; actual plotting is pure matplotlib ax.bar3d(). No seaborn plot functions called, severely limiting Library Mastery.
  • Font sizes below recommended minimums: title 22pt (need ≥24pt), axis labels 18pt (need ≥20pt), tick labels 14pt (need ≥16pt), value labels 11pt too small for 4800×2700px.
  • Several value labels obscured by foreground bars due to 3D perspective occlusion — consider adjusting label placement or z-offset.
  • No data storytelling or visual emphasis — the key insight (Phones dominate all regions) is not highlighted through color intensity, size variation, or any visual hierarchy.

Issues Found

  1. LM-01/LM-02 LOW: Seaborn has no 3D capabilities; implementation falls back to raw ax.bar3d() with seaborn only for theme styling.
    • Fix: This is an inherent library limitation. Maximize seaborn involvement by using sns.color_palette() explicitly and any seaborn-specific styling helpers that apply to 3D axes.
  2. VQ-01 LOW: Font sizes slightly below anyplot minimums at 4800×2700px resolution.
    • Fix: Increase title to 24pt, axis labels to 20pt, tick labels to 16pt, value labels to 13-14pt.
  3. DE-03 LOW: No visual hierarchy or data storytelling emphasis.
    • Fix: Use graduated alpha or edge-highlighting to emphasize the dominant product (Phones), or add a subtle annotation marking the peak bar to guide the viewer's eye.

AI Feedback for Next Attempt

Fix font sizes first (title→24, labels→20, ticks→16). Then address storytelling: use alpha variation (e.g., 0.65 for lower-value bars, 1.0 for higher-value bars) to create visual hierarchy, or add a bold edge to the tallest bar per region. Since seaborn cannot do 3D natively, maximize seaborn involvement by calling sns.color_palette() explicitly for colors and use sns.despine() or other seaborn utilities where applicable. Consider reducing value label size to 13pt but ensuring they're not clipped by adjusting z-offset (h + 2.5 instead of h + 1.5).

Verdict: REJECTED

@github-actions github-actions Bot added quality:77 Quality score 77/100 ai-rejected Quality not OK, triggers update labels May 15, 2026
@github-actions github-actions Bot added ai-attempt-1 First repair attempt and removed ai-rejected Quality not OK, triggers update labels May 15, 2026
@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
Copy link
Copy Markdown
Contributor

claude Bot commented May 15, 2026

AI Review - Attempt 2/3

Image Description

Light render (plot-light.png): The render shows a two-panel composition on a warm off-white (#FAF8F1) background. The left panel is a 3D bar chart (4 products × 4 regions = 16 bars) viewed at elev=30°/azim=45°. Bars use Okabe-Ito colors in canonical order: #009E73 (Laptops, first series ✓), vermillion/orange (Tablets), blue (Phones), reddish-purple (Monitors). Numeric value labels appear above each bar. Product legend is positioned upper-left with correct colors. The right panel is a seaborn heatmap titled "Phones Lead All Regions" using a Greens sequential colormap with annotated cell values (Laptops: 46/32/39/30, Tablets: 22/18/27/21, Phones: 68/56/72/60, Monitors: 16/10/16/13) and a colorbar labeled "Units Sold (K)". All text on the light background is clearly readable against #FAF8F1.
Legibility verdict: PASS — title, axis labels, tick labels, and annotations all readable. However, font sizes (title 22pt, axis labels 18pt, ticks 14pt) are slightly below the 24/20/16 pt guidelines.

Dark render (plot-dark.png): Same two-panel layout on a warm near-black (#1A1A17) background. The 3D bar data colors are identical to the light render — Okabe-Ito positions 1–4 unchanged ✓. Chrome elements (title, axis labels, tick labels) have flipped to light text (INK = #F0EFE8) against the dark surface. No dark-on-dark failures detected. The heatmap on the right also flips chrome correctly. Legend background uses elevated dark (#242420). All text is readable against the dark background.
Legibility verdict: PASS — all elements legible in dark theme; no dark text on dark background observed.

Both paragraphs are required. A review that only describes one render is invalid.

Score: 79/100

Category Score Max
Visual Quality 24 30
Design Excellence 11 20
Spec Compliance 14 15
Data Quality 14 15
Code Quality 10 10
Library Mastery 6 10
Total 79 100

Visual Quality (24/30)

  • VQ-01: Text Legibility (6/8) — Sizes explicitly set throughout: title 22pt, axis labels 18pt, ticks 14pt, legend 14pt, annotations 11pt. All readable, but all are below the 24/20/16pt minimums for 4800×2700 rendering. Explicitly set = good; below spec = small deduction.
  • VQ-02: No Overlap (4/6) — 3D perspective causes unavoidable partial occlusion of back-row value labels by front bars. Heatmap companion is clean with no overlap. Minor deduction for 3D perspective label collision.
  • VQ-03: Element Visibility (5/6) — Bars well-sized, alpha=0.85 gives good visual depth. All 16 bars visible. Heatmap cells clear.
  • VQ-04: Color Accessibility (2/2) — Okabe-Ito is CVD-safe. Greens sequential colormap is appropriate for heatmap magnitude encoding. No red-green sole signal.
  • VQ-05: Layout & Canvas (3/4) — 16:9 canvas used well with the two-panel layout. bbox_inches='tight' prevents clipping.
  • VQ-06: Axis Labels & Title (2/2) — "Product Category", "Region", "Units Sold (thousands)" are descriptive with units. Heatmap axes labeled similarly.
  • VQ-07: Palette Compliance (2/2) — First categorical series is #009E73 ✓. Colors follow Okabe-Ito order ✓. Backgrounds are #FAF8F1 (light) / #1A1A17 (dark) ✓. Chrome flips correctly between themes ✓.

Design Excellence (11/20)

  • DE-01: Aesthetic Sophistication (5/8) — Two-panel design (3D bar + heatmap companion) is sophisticated for a seaborn implementation. Transparent 3D pane backgrounds (pane.fill=False), custom Okabe-Ito palette, themed legend. Above default 4; not quite at publication-level 6.
  • DE-02: Visual Refinement (3/6) — Transparent panes with subtle edges, full theme-adaptive RC parameters (5 ink tokens). Some refinement visible but the 3D chart lacks the grid and spine polish typical of 2D seaborn plots. Default 3D chrome is not as polished as equivalent 2D work.
  • DE-03: Data Storytelling (3/6) — "Phones Lead All Regions" heatmap title communicates a clear insight. The heatmap highlights the dominant product with visual contrast. Good focal point created by the darkest row. Slightly below full credit — the 3D chart itself has no emphasis to reinforce this story.

Spec Compliance (14/15)

  • SC-01: Plot Type (5/5) — Correct 3D bar chart using ax.bar3d(); bars rise from a 2D categorical grid.
  • SC-02: Required Features (3/4) — Spacing between bars ✓, color encoding product categories ✓, viewing angle 30°/45° ✓, value labels on top ✓, legend ✓. Base-plane grid lines uncertain: pane.fill=False makes panes transparent but base-plane grid visibility in this configuration is ambiguous.
  • SC-03: Data Mapping (3/3) — X=product, Y=region, Z=units sold; all 4×4=16 bars shown.
  • SC-04: Title & Legend (3/3) — Title format "bar-3d-categorical · seaborn · anyplot.ai" ✓. Product legend with correct Okabe-Ito color patches ✓.

Data Quality (14/15)

  • DQ-01: Feature Coverage (5/6) — Full 4×4 grid with value labels; complementary heatmap shows same data with magnitude emphasis. Slight deduction: no 3D bars of widely varied height to showcase depth perception at its best.
  • DQ-02: Realistic Context (5/5) — Quarterly unit sales (thousands) by product category and region. Business scenario is realistic, plausible, and neutral.
  • DQ-03: Appropriate Scale (4/4) — Phones: 56–72K, Laptops: 30–46K, Tablets: 18–27K, Monitors: 10–16K. Proportions reflect realistic category dominance.

Code Quality (10/10)

  • CQ-01: KISS Structure (3/3) — Flat procedural code: imports → tokens → data → plot → save. No functions or classes.
  • CQ-02: Reproducibility (2/2) — np.random.seed(42) set.
  • CQ-03: Clean Imports (2/2) — All imported modules (os, mpatches, plt, np, sns) are used.
  • CQ-04: Code Elegance (2/2) — Clean, Pythonic. zip with strict=False is appropriate. Pane loop is concise. No fake functionality.
  • CQ-05: Output & API (1/1) — Saves as plot-{THEME}.png with facecolor=PAGE_BG ✓.

Library Mastery (6/10)

  • LM-01: Idiomatic Usage (4/5) — sns.set_theme() with custom RC dict is the canonical seaborn approach for theme-adaptive styling. For a 3D bar chart (not in seaborn's native API), falling back to matplotlib's bar3d is the correct pattern. Correct usage, well-executed.
  • LM-02: Distinctive Features (2/5) — sns.set_theme with 5 custom ink tokens demonstrates seaborn theming knowledge. If the heatmap uses sns.heatmap with annot=True, that would be distinctively seaborn; however, the seaborn.py on this PR branch only uses sns.set_theme() as the sole seaborn call — no native seaborn plot function is invoked. The core 3D plotting is entirely matplotlib. This limits the library mastery score.

Score Caps Applied

  • None — all cap conditions absent (VQ-02>0, VQ-03>0, SC-01>0, DQ-02>0, DE-01=5>2, CQ-04=2>0)

Strengths

  • Correct 3D bar chart with Okabe-Ito palette (first series #009E73), viewed at 30°/45° per spec
  • Transparent 3D pane backgrounds with subtle themed edges — polished 3D detail not seen in most implementations
  • Theme-adaptive chrome using 5 ink tokens (INK, INK_SOFT, INK_MUTED, PAGE_BG, ELEVATED_BG) — both renders pass readability checks
  • Realistic, neutral business data (quarterly unit sales by product and region)
  • Value annotations on all 16 bars; deterministic with seed(42)
  • Images show a companion seaborn heatmap titled "Phones Lead All Regions" that significantly elevates storytelling — this should be committed to the implementation

Weaknesses

  • Font sizes are below the 4800×2700 minimums: title 22pt (need ≥24pt), axis labels 18pt (need ≥20pt), tick labels 14pt (need ≥16pt), annotations 11pt (too small). Increase all to meet guidelines.
  • The seaborn.py in the PR branch does not include the companion heatmap (sns.heatmap) visible in the rendered images — the implementation only calls sns.set_theme() with no native seaborn plot function, weakening library mastery. Add the heatmap subplot to the committed code to match the generated images and satisfy AR-05 seaborn plot function requirement.
  • Base-plane grid lines on the 3D chart are uncertain with pane.fill=False — explicitly enable grid lines on the base plane for spec compliance.
  • DE-03 storytelling is partially achieved via the heatmap title but could be strengthened with color emphasis on the dominant 3D bars.

Issues Found

  1. VQ-01 LOW: Font sizes below 4800×2700 guidelines (title 22→24pt, axis labels 18→20pt, ticks 14→16pt, annotations 11→14pt)
    • Fix: Increase all text sizes to meet minimums
  2. LM-02 LOW: No native seaborn plot function called in committed code (sns.set_theme only)
    • Fix: Add sns.heatmap companion subplot (as visible in generated images) so the seaborn.py uses an actual seaborn chart function
  3. SC-02 MINOR: Base-plane grid lines visibility uncertain with transparent panes
    • Fix: Explicitly call ax.set_axisbelow(False) or draw base-plane gridlines to ensure spec compliance

AI Feedback for Next Attempt

Committed seaborn.py must include the companion sns.heatmap subplot visible in the rendered images (this subplot uses a seaborn native plot function, satisfies AR-05, and dramatically improves LM-02 and DE-03). Increase font sizes across the board: title→24pt, axis labels→20pt, tick labels→16pt, value annotations→14pt. Explicitly enable base-plane grid lines on the 3D chart. These three fixes should push the score above 80.

Verdict: REJECTED

@github-actions github-actions Bot added quality:79 Quality score 79/100 ai-rejected Quality not OK, triggers update and removed quality:77 Quality score 77/100 labels May 15, 2026
@github-actions github-actions Bot added ai-attempt-2 Second repair attempt and removed ai-rejected Quality not OK, triggers update labels May 15, 2026
@github-actions
Copy link
Copy Markdown
Contributor Author

🔧 Repair Attempt 2/4

Applied fixes based on AI review feedback.

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


🤖 impl-repair

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented May 15, 2026

AI Review - Attempt 3/3

Image Description

Light render (plot-light.png): Dual-panel layout on warm off-white (#FAF8F1) background. Left panel (~45% width): 3D bar chart with a 4×4 categorical grid (Products: Laptops, Tablets, Phones, Monitors × Regions: North, South, East, West). Bars are colored in correct Okabe-Ito order — Laptops=#009E73 (green), Tablets=#D55E00 (orange), Phones=#0072B2 (blue), Monitors=#CC79A7 (purple). Value labels are displayed on top of all 16 bars (ranging from ~10 to ~72). Axis labels "Product Category", "Region", "Units Sold (thousands)" clearly visible. Legend top-left lists product types. Right panel (~50% width): seaborn heatmap titled "Phones Lead All Regions" using a green sequential colormap with annotated cell values and a colorbar labeled "Units Sold (K)". All text is readable against the warm off-white background. Legibility verdict: PASS.

Dark render (plot-dark.png): Identical two-panel structure on near-black (#1A1A17) background. Okabe-Ito data colors on the 3D bars are identical to the light render — chrome (title, axis labels, tick labels, legend text, cell annotations) correctly flips to light ink tones. The heatmap cell annotations (white/dark text adapting to cell luminance) remain readable. No dark-on-dark failures detected: all labels use light text against the dark surface. Colorbar labels are visible. Legibility verdict: PASS.

Both paragraphs are required. A review that only describes one render is invalid.

Score: 85/100

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

Visual Quality (27/30)

  • VQ-01: Text Legibility (6/8) — Fonts explicitly set (title=22pt, labels=18pt, ticks=14pt) but slightly below style-guide minimums (24/20/16pt); all text is readable in both themes
  • VQ-02: No Overlap (6/6) — No significant label collisions; 3D value annotations are well-spaced; heatmap cell annotations are clear
  • VQ-03: Element Visibility (6/6) — 3D bars clearly distinguishable with shading and alpha; heatmap cells well-defined
  • VQ-04: Color Accessibility (2/2) — Okabe-Ito is CVD-safe; adequate contrast between bars and background in both themes
  • VQ-05: Layout & Canvas (3/4) — Dual-panel fills canvas well (~65% utilization); 3D perspective creates some inherent empty space but overall balanced
  • VQ-06: Axis Labels & Title (2/2) — "Product Category", "Region", "Units Sold (thousands)" are descriptive with units; heatmap axes labeled "Product" and "Region"
  • VQ-07: Palette Compliance (2/2) — First series = #009E73; Okabe-Ito order correct; backgrounds #FAF8F1 / #1A1A17; chrome correctly theme-adaptive in both renders

Design Excellence (13/20)

  • DE-01: Aesthetic Sophistication (5/8) — Dual-panel design (3D overview + heatmap insight panel) shows clear design thinking above library defaults; transparent 3D panes and consistent green color theme across panels add polish
  • DE-02: Visual Refinement (4/6) — Transparent pane fills (fill=False) are the 3D equivalent of spine removal; subtle pane edge colors; clean layout; both panels uncluttered
  • DE-03: Data Storytelling (4/6) — Narrative title "Phones Lead All Regions" in heatmap companion explicitly communicates the insight; dual-panel structure guides viewer from 3D comparison to focal insight

Spec Compliance (14/15)

  • SC-01: Plot Type (5/5) — Correct 3D bar chart with bars rising from 2D categorical grid; two categorical axes × height encoding
  • SC-02: Required Features (3/4) — Correct viewing angle (elev=30, azim=45) ✓; value labels on all bars (16 < 25 threshold) ✓; slight spacing between bars (bar_w=0.55 on unit grid) ✓; legend present ✓; explicit grid lines on the base XY plane absent (pane edges provide some orientation but base floor grid not explicitly drawn)
  • SC-03: Data Mapping (3/3) — X=Product Category, Y=Region, Z=value; all 16 bars correctly mapped and visible
  • SC-04: Title & Legend (3/3) — Title "bar-3d-categorical · seaborn · anyplot.ai" correct format; legend labels match data (Laptops, Tablets, Phones, Monitors)

Data Quality (15/15)

  • DQ-01: Feature Coverage (6/6) — Full 4×4 grid shows all product-region combinations; wide range of values (10–72) demonstrates both sparse and dense data; variation across rows and columns
  • DQ-02: Realistic Context (5/5) — Quarterly unit sales by product and region is a neutral, comprehensible business scenario; no controversial topics
  • DQ-03: Appropriate Scale (4/4) — Phones outsell all other categories; Laptops > Tablets > Monitors; values plausible for consumer electronics (thousands of units per quarter)

Code Quality (10/10)

  • CQ-01: KISS Structure (3/3) — Imports → data → plot → save; no functions or classes
  • CQ-02: Reproducibility (2/2) — np.random.seed(42) present
  • CQ-03: Clean Imports (2/2) — All imports used; no unused dependencies
  • CQ-04: Code Elegance (2/2) — Clean, Pythonic; no over-engineering; no fake UI elements
  • CQ-05: Output & API (1/1) — Saves as plot-{THEME}.png; current API

Library Mastery (6/10)

  • LM-01: Idiomatic Usage (3/5) — sns.heatmap with cell annotations is idiomatic seaborn; primary 3D chart requires matplotlib (seaborn has no native 3D), which is the correct approach; sns.set_theme used properly
  • LM-02: Distinctive Features (3/5) — sns.heatmap with annotated cells and sequential palette is a seaborn-distinctive feature that adds real value as the companion visualization; colorbar handled natively by seaborn

Score Caps Applied

  • None — all cap conditions (VQ-02=6, VQ-03=6, SC-01=5, DQ-02=5, DE-01=5 > 2, CQ-04=2) are satisfied; no caps triggered

Strengths

  • Dual-panel design (3D bar + companion heatmap) is a thoughtful architectural choice that leverages both matplotlib's 3D capabilities and seaborn's native heatmap
  • Narrative heatmap title "Phones Lead All Regions" creates genuine data storytelling without over-engineering
  • Correct Okabe-Ito color order (first series #009E73), correctly consistent across both themes
  • Theme-adaptive chrome (backgrounds, text, tick colors, pane edges) works correctly in both light and dark renders
  • All 16 value labels on 3D bars are clean and readable; data is realistic and proportionally plausible

Weaknesses

  • Font sizes are explicitly set but slightly below style-guide minimums (title=22pt vs ≥24pt, axis labels=18pt vs ≥20pt, ticks=14pt vs ≥16pt) — increase all to meet minimum thresholds
  • Base XY floor grid lines absent — explicitly add ax.grid(True) or draw floor grid lines to help relate bars to categorical positions (per spec)
  • Library Mastery limited: seaborn is primarily used for styling + companion heatmap; the primary 3D visualization is entirely matplotlib; consider leaning harder into seaborn patterns

Issues Found

  1. VQ-01 MINOR: Font sizes slightly below style-guide minimums
    • Fix: title → fontsize=24, axis labels → fontsize=20, tick labels → fontsize=16
  2. SC-02 MINOR: Base plane grid lines not present
    • Fix: Add ax.grid(True) after subplot creation or explicitly draw lines at z=0 across categorical grid positions

AI Feedback for Next Attempt

Increase font sizes to meet the style guide minimums (title≥24pt, labels≥20pt, ticks≥16pt). Add explicit base-plane grid lines on the 3D chart to help viewers orient bars to their categorical positions. Current design is strong — dual-panel with narrative heatmap is an approved pattern. These are minor refinements only.

Verdict: APPROVED

@github-actions github-actions Bot added quality:85 Quality score 85/100 ai-approved Quality OK, ready for merge and removed quality:79 Quality score 79/100 labels May 15, 2026
@MarkusNeusinger MarkusNeusinger merged commit aca5226 into main May 15, 2026
@MarkusNeusinger MarkusNeusinger deleted the implementation/bar-3d-categorical/seaborn branch May 15, 2026 09:15
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 ai-attempt-2 Second repair attempt quality:85 Quality score 85/100

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant