{"spec_id":"bar-stacked-labeled","library":"plotnine","language":"python","code":"\"\"\" anyplot.ai\nbar-stacked-labeled: Stacked Bar Chart with Total Labels\nLibrary: plotnine 0.15.4 | Python 3.13.13\nQuality: 76/100 | Updated: 2026-05-18\n\"\"\"\n\nimport pandas as pd\nfrom plotnine import (\n    aes,\n    element_blank,\n    element_text,\n    geom_bar,\n    geom_text,\n    ggplot,\n    labs,\n    position_stack,\n    scale_fill_manual,\n    theme,\n    theme_minimal,\n)\n\n\n# Data - Quarterly revenue by product category\ndata = {\n    \"Quarter\": [\"Q1\", \"Q1\", \"Q1\", \"Q2\", \"Q2\", \"Q2\", \"Q3\", \"Q3\", \"Q3\", \"Q4\", \"Q4\", \"Q4\"],\n    \"Product\": [\n        \"Software\",\n        \"Hardware\",\n        \"Services\",\n        \"Software\",\n        \"Hardware\",\n        \"Services\",\n        \"Software\",\n        \"Hardware\",\n        \"Services\",\n        \"Software\",\n        \"Hardware\",\n        \"Services\",\n    ],\n    \"Revenue\": [120, 85, 45, 145, 92, 58, 168, 78, 72, 195, 105, 88],\n}\ndf = pd.DataFrame(data)\n\n# Calculate totals for each quarter\ntotals = df.groupby(\"Quarter\")[\"Revenue\"].sum().reset_index()\ntotals.columns = [\"Quarter\", \"Total\"]\n\n# Define category order for proper stacking\ndf[\"Quarter\"] = pd.Categorical(df[\"Quarter\"], categories=[\"Q1\", \"Q2\", \"Q3\", \"Q4\"], ordered=True)\ndf[\"Product\"] = pd.Categorical(df[\"Product\"], categories=[\"Services\", \"Hardware\", \"Software\"], ordered=True)\ntotals[\"Quarter\"] = pd.Categorical(totals[\"Quarter\"], categories=[\"Q1\", \"Q2\", \"Q3\", \"Q4\"], ordered=True)\n\n# Python-inspired color palette\ncolors = [\"#306998\", \"#FFD43B\", \"#4B8BBE\"]  # Blue, Yellow, Light Blue\n\n# Create stacked bar chart\nplot = (\n    ggplot(df, aes(x=\"Quarter\", y=\"Revenue\", fill=\"Product\"))\n    + geom_bar(stat=\"identity\", position=\"stack\", width=0.7)\n    + geom_text(aes(label=\"Revenue\"), position=position_stack(vjust=0.5), size=12, color=\"white\", fontweight=\"bold\")\n    + geom_text(\n        data=totals,\n        mapping=aes(x=\"Quarter\", y=\"Total\", label=\"Total\"),\n        inherit_aes=False,\n        va=\"bottom\",\n        size=14,\n        fontweight=\"bold\",\n        nudge_y=8,\n    )\n    + scale_fill_manual(values=colors)\n    + labs(\n        title=\"Quarterly Revenue by Product · bar-stacked-labeled · plotnine · pyplots.ai\",\n        x=\"Quarter\",\n        y=\"Revenue ($ thousands)\",\n        fill=\"Product\",\n    )\n    + theme_minimal()\n    + theme(\n        figure_size=(16, 9),\n        plot_title=element_text(size=24, weight=\"bold\"),\n        axis_title_x=element_text(size=20),\n        axis_title_y=element_text(size=20),\n        axis_text_x=element_text(size=18),\n        axis_text_y=element_text(size=16),\n        legend_title=element_text(size=18),\n        legend_text=element_text(size=16),\n        legend_position=\"right\",\n        panel_grid_major_x=element_blank(),\n        panel_grid_minor=element_blank(),\n    )\n)\n\n# Save\nplot.save(\"plot.png\", dpi=300, verbose=False)\n"}