{"spec_id":"bar-3d-categorical","library":"pygal","language":"python","code":"\"\"\" anyplot.ai\nbar-3d-categorical: 3D Bar Chart for Categorical Comparison\nLibrary: pygal 3.1.0 | Python 3.13.13\nQuality: 81/100 | Created: 2026-05-15\n\"\"\"\n\nimport os\nimport sys\n\n\n# Temporarily remove current directory from path to avoid name collision with pygal package\n_cwd = sys.path[0] if sys.path[0] else \".\"\nif _cwd in sys.path:\n    sys.path.remove(_cwd)\n\nimport pygal\nfrom pygal.style import Style\n\n\nsys.path.insert(0, _cwd)\n\n# Theme tokens\nTHEME = os.getenv(\"ANYPLOT_THEME\", \"light\")\nPAGE_BG = \"#FAF8F1\" if THEME == \"light\" else \"#1A1A17\"\nINK = \"#1A1A17\" if THEME == \"light\" else \"#F0EFE8\"\nINK_MUTED = \"#6B6A63\" if THEME == \"light\" else \"#A8A79F\"\n\nIMPRINT = (\"#009E73\", \"#C475FD\", \"#4467A3\", \"#BD8233\", \"#AE3030\", \"#2ABCCD\", \"#954477\")\n\n# Data: Crop yield (kg/hectare) across five wheat varieties and four fertilizer treatments\nvarieties = [\"Aster\", \"Borealis\", \"Crocus\", \"Delphi\", \"Ember\"]\nyields = {\n    \"Control\": [2850, 3120, 2640, 3380, 2970],\n    \"Nitrogen+\": [3540, 3820, 3290, 4050, 3650],\n    \"Phosphorus+\": [3180, 3460, 2980, 3720, 3310],\n    \"NPK Blend\": [3920, 4210, 3680, 4480, 4020],\n}\n\n# Style\ncustom_style = Style(\n    background=PAGE_BG,\n    plot_background=PAGE_BG,\n    foreground=INK,\n    foreground_strong=INK,\n    foreground_subtle=INK_MUTED,\n    colors=IMPRINT,\n    title_font_size=28,\n    label_font_size=18,\n    major_label_font_size=16,\n    legend_font_size=16,\n    value_font_size=14,\n    stroke_width=3,\n)\n\n# Plot\nchart = pygal.Bar(\n    style=custom_style,\n    width=4800,\n    height=2700,\n    title=\"Crop Yield by Variety & Treatment · bar-3d-categorical · pygal · anyplot.ai\",\n    x_title=\"Crop Variety\",\n    y_title=\"Yield (kg / hectare)\",\n    show_legend=True,\n    show_y_guides=True,\n    show_x_guides=False,\n    margin=80,\n)\n\nchart.x_labels = varieties\n\nfor treatment, values in yields.items():\n    chart.add(treatment, values)\n\n# Save\nchart.render_to_png(f\"plot-{THEME}.png\")\nwith open(f\"plot-{THEME}.html\", \"wb\") as f:\n    f.write(chart.render())\n"}