{"spec_id":"bar-stacked","library":"letsplot","language":"python","code":"\"\"\" anyplot.ai\nbar-stacked: Stacked Bar Chart\nLibrary: letsplot 4.9.0 | Python 3.13.13\nQuality: 88/100 | Updated: 2026-05-09\n\"\"\"\n\nimport os\n\nimport pandas as pd\nfrom lets_plot import *\n\n\nLetsPlot.setup_html()\n\n# Theme tokens\nTHEME = os.getenv(\"ANYPLOT_THEME\", \"light\")\nPAGE_BG = \"#FAF8F1\" if THEME == \"light\" else \"#1A1A17\"\nELEVATED_BG = \"#FFFDF6\" if THEME == \"light\" else \"#242420\"\nINK = \"#1A1A17\" if THEME == \"light\" else \"#F0EFE8\"\nINK_SOFT = \"#4A4A44\" if THEME == \"light\" else \"#B8B7B0\"\nRULE = \"rgba(26,26,23,0.15)\" if THEME == \"light\" else \"rgba(240,239,232,0.15)\"\n\n# Okabe-Ito palette\nIMPRINT = [\"#009E73\", \"#C475FD\", \"#4467A3\", \"#BD8233\"]\n\n# Data: Quarterly sales by product category\ndata = {\n    \"quarter\": [\"Q1\", \"Q2\", \"Q3\", \"Q4\"] * 4,\n    \"product\": [\"Electronics\"] * 4 + [\"Furniture\"] * 4 + [\"Clothing\"] * 4 + [\"Office Supplies\"] * 4,\n    \"sales\": [\n        120,\n        145,\n        165,\n        190,  # Electronics\n        85,\n        92,\n        78,\n        110,  # Furniture\n        65,\n        88,\n        95,\n        72,  # Clothing\n        45,\n        52,\n        48,\n        58,  # Office Supplies\n    ],\n}\ndf = pd.DataFrame(data)\n\n# Create stacked bar chart with refined visual presentation\nplot = (\n    ggplot(df, aes(x=\"quarter\", y=\"sales\", fill=\"product\"))\n    + geom_bar(\n        stat=\"identity\",\n        position=\"stack\",\n        width=0.65,\n        color=\"white\",\n        size=0.3,\n        tooltips=layer_tooltips().title(\"@product\").line(\"Sales: @sales K$\").format(\"sales\", \".0f\"),\n    )\n    + scale_fill_manual(values=IMPRINT)\n    + labs(title=\"bar-stacked · letsplot · anyplot.ai\", x=\"Quarter\", y=\"Sales (Thousands $)\", fill=\"Product\")\n    + theme(\n        plot_background=element_rect(fill=PAGE_BG, color=PAGE_BG),\n        panel_background=element_rect(fill=PAGE_BG),\n        panel_grid_major_y=element_line(color=RULE, size=0.25),\n        panel_grid_major_x=element_blank(),\n        panel_grid_minor=element_blank(),\n        axis_title=element_text(size=20, color=INK),\n        axis_text=element_text(size=16, color=INK_SOFT),\n        axis_ticks=element_blank(),\n        axis_line_y=element_line(color=INK_SOFT, size=0.3),\n        axis_line_x=element_line(color=INK_SOFT, size=0.3),\n        plot_title=element_text(size=24, color=INK),\n        legend_background=element_rect(fill=ELEVATED_BG, color=INK_SOFT, size=0.3),\n        legend_text=element_text(size=16, color=INK_SOFT),\n        legend_title=element_text(size=16, color=INK),\n        legend_position=\"right\",\n    )\n    + ggsize(1600, 900)\n)\n\n# Save PNG (scale 3x for 4800 × 2700 px)\nggsave(plot, f\"plot-{THEME}.png\", path=\".\", scale=3)\n\n# Save HTML\nggsave(plot, f\"plot-{THEME}.html\", path=\".\")\n"}