{"spec_id":"bar-stacked","library":"pygal","language":"python","code":"\"\"\" anyplot.ai\nbar-stacked: Stacked Bar Chart\nLibrary: pygal 3.1.0 | Python 3.13.13\nQuality: 94/100 | Updated: 2026-05-09\n\"\"\"\n\nimport os\nimport sys\n\n\nscript_dir = os.path.dirname(os.path.abspath(__file__))\nfor path in (\"\", \".\", script_dir):\n    if path in sys.path:\n        sys.path.remove(path)\n\nimport pygal\nfrom pygal.style import Style\n\n\n# Theme tokens from default-style-guide.md\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\n# Okabe-Ito palette: first series always #009E73\nIMPRINT = (\n    \"#009E73\",  # bluish green (brand)\n    \"#C475FD\",  # vermillion\n    \"#4467A3\",  # blue\n    \"#BD8233\",  # reddish purple\n    \"#AE3030\",  # orange\n)\n\n# Data: Energy consumption by source across quarters (in millions of kWh)\ncategories = [\"Q1\", \"Q2\", \"Q3\", \"Q4\"]\nsources = {\n    \"Solar\": [45.2, 62.1, 78.5, 55.3],\n    \"Wind\": [72.3, 68.5, 51.2, 64.7],\n    \"Hydro\": [38.1, 45.6, 52.3, 48.9],\n    \"Nuclear\": [95.4, 96.2, 97.1, 98.3],\n}\n\n# Custom style for 4800x2700 canvas with proper theme-adaptive colors\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=22,\n    major_label_font_size=18,\n    legend_font_size=16,\n    value_font_size=14,\n    stroke_width=3,\n)\n\n# Create stacked bar chart with visible grid lines\nchart = pygal.StackedBar(\n    width=4800,\n    height=2700,\n    style=custom_style,\n    title=\"bar-stacked · pygal · anyplot.ai\",\n    x_title=\"Quarter\",\n    y_title=\"Energy (Million kWh)\",\n    show_y_guides=True,\n    show_x_guides=False,\n    legend_at_bottom=True,\n    legend_box_size=24,\n    spacing=80,\n    margin=60,\n    margin_top=120,\n    margin_bottom=180,\n    print_values=True,\n    print_values_position=\"center\",\n    value_formatter=lambda x: f\"{x:.1f}\",\n    show_legend=True,\n    truncate_legend=-1,\n)\n\n# Set x-axis labels\nchart.x_labels = categories\n\n# Add data series (stacked components)\nfor source_name, values in sources.items():\n    chart.add(source_name, values)\n\nos.chdir(script_dir)\nchart.render_to_png(f\"plot-{THEME}.png\")\nchart.render_to_file(f\"plot-{THEME}.html\")\n"}