{"spec_id":"histogram-stacked","library":"plotnine","language":"python","code":"\"\"\" anyplot.ai\nhistogram-stacked: Stacked Histogram\nLibrary: plotnine 0.15.4 | Python 3.13.13\nQuality: 88/100 | Updated: 2026-05-12\n\"\"\"\n\nimport os\nimport pathlib\n\nimport numpy as np\nimport pandas as pd\nfrom plotnine import (\n    aes,\n    element_line,\n    element_rect,\n    element_text,\n    geom_histogram,\n    ggplot,\n    labs,\n    scale_fill_manual,\n    theme,\n    theme_minimal,\n)\n\n\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\"\n\nIMPRINT = [\"#009E73\", \"#C475FD\", \"#4467A3\"]\n\n# Data - Plant growth measurements across different soil types\nnp.random.seed(42)\n\nsoil_a = np.random.normal(loc=25, scale=5, size=150)\nsoil_b = np.random.normal(loc=30, scale=6, size=120)\nsoil_c = np.random.normal(loc=22, scale=4, size=100)\n\ndf = pd.DataFrame(\n    {\n        \"height\": np.concatenate([soil_a, soil_b, soil_c]),\n        \"soil_type\": ([\"Sandy Soil\"] * 150 + [\"Loamy Soil\"] * 120 + [\"Clay Soil\"] * 100),\n    }\n)\n\n# Plot\nanyplot_theme = theme(\n    plot_background=element_rect(fill=PAGE_BG, color=PAGE_BG),\n    panel_background=element_rect(fill=PAGE_BG),\n    panel_grid_major=element_line(color=INK, size=0.3, alpha=0.10),\n    panel_grid_minor=element_line(color=INK, size=0.2, alpha=0.05),\n    panel_border=element_rect(color=INK_SOFT, fill=None, size=0.4),\n    axis_title=element_text(color=INK, size=20),\n    axis_text=element_text(color=INK_SOFT, size=16),\n    axis_line=element_line(color=INK_SOFT, size=0.5),\n    plot_title=element_text(color=INK, size=24, weight=\"medium\"),\n    legend_background=element_rect(fill=ELEVATED_BG, color=INK_SOFT),\n    legend_text=element_text(color=INK_SOFT, size=16),\n    legend_title=element_text(color=INK, size=18),\n    legend_position=\"right\",\n    figure_size=(16, 9),\n)\n\nplot = (\n    ggplot(df, aes(x=\"height\", fill=\"soil_type\"))\n    + geom_histogram(bins=20, position=\"stack\", alpha=0.85, color=PAGE_BG, size=0.4)\n    + labs(x=\"Plant Height (cm)\", y=\"Frequency\", title=\"histogram-stacked · plotnine · anyplot.ai\", fill=\"Soil Type\")\n    + scale_fill_manual(values=IMPRINT)\n    + theme_minimal()\n    + anyplot_theme\n)\n\n# Save\nplot_dir = pathlib.Path(__file__).parent\nplot_dir.mkdir(parents=True, exist_ok=True)\nplot.save(str(plot_dir / f\"plot-{THEME}.png\"), dpi=300)\n"}