{"spec_id":"area-stacked-confidence","library":"pygal","language":"python","code":"\"\"\" anyplot.ai\narea-stacked-confidence: Stacked Area Chart with Confidence Bands\nLibrary: pygal 3.1.0 | Python 3.13.13\nQuality: 87/100 | Updated: 2026-05-18\n\"\"\"\n\nimport os\nimport sys\n\nimport numpy as np\n\n\nsys.path = [p for p in sys.path if p != \"\"]\n\nimport pygal\nfrom pygal.style import Style\n\n\nTHEME = os.getenv(\"ANYPLOT_THEME\", \"light\")\nPAGE_BG = \"#FAF8F1\" if THEME == \"light\" else \"#1A1A17\"\nINK = \"#1A1A17\" if THEME == \"light\" else \"#F0EFE8\"\nINK_SOFT = \"#4A4A44\" if THEME == \"light\" else \"#B8B7B0\"\n\nif THEME == \"light\":\n    band_color_a = \"#A0E0BB\"\n    center_color_a = \"#009E73\"\n    band_color_b = \"#F0C68A\"\n    center_color_b = \"#C475FD\"\n    band_color_c = \"#7FC4E8\"\n    center_color_c = \"#4467A3\"\nelse:\n    band_color_a = \"#1FA862\"\n    center_color_a = \"#009E73\"\n    band_color_b = \"#C64500\"\n    center_color_b = \"#C475FD\"\n    band_color_c = \"#0058A3\"\n    center_color_c = \"#4467A3\"\n\nnp.random.seed(42)\nquarters = [\"Q1'24\", \"Q2'24\", \"Q3'24\", \"Q4'24\", \"Q1'25\", \"Q2'25\", \"Q3'25\", \"Q4'25\"]\n\nproduct_a = np.array([120.0, 125.0, 130.0, 140.0, 145.0, 150.0, 158.0, 165.0])\nuncertainty_a = np.array([8.0, 9.0, 8.5, 10.0, 9.5, 11.0, 10.5, 12.0])\na_lower = (product_a - uncertainty_a).tolist()\na_upper = (product_a + uncertainty_a).tolist()\na_center = product_a.tolist()\n\nproduct_b = np.array([80.0, 85.0, 88.0, 92.0, 95.0, 100.0, 105.0, 110.0])\nuncertainty_b = np.array([6.0, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5, 10.0])\nb_lower = (product_b - uncertainty_b).tolist()\nb_upper = (product_b + uncertainty_b).tolist()\nb_center = product_b.tolist()\n\nproduct_c = np.array([30.0, 40.0, 55.0, 70.0, 85.0, 95.0, 105.0, 115.0])\nuncertainty_c = np.array([12.0, 15.0, 18.0, 20.0, 22.0, 24.0, 25.0, 26.0])\nc_lower = (product_c - uncertainty_c).tolist()\nc_upper = (product_c + uncertainty_c).tolist()\nc_center = product_c.tolist()\n\ncustom_style = Style(\n    background=PAGE_BG,\n    plot_background=PAGE_BG,\n    foreground=INK,\n    foreground_strong=INK,\n    foreground_subtle=INK_SOFT,\n    colors=(\n        band_color_a,\n        center_color_a,\n        band_color_a,\n        band_color_b,\n        center_color_b,\n        band_color_b,\n        band_color_c,\n        center_color_c,\n        band_color_c,\n    ),\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=2,\n)\n\nchart = pygal.StackedLine(\n    width=4800,\n    height=2700,\n    style=custom_style,\n    title=\"area-stacked-confidence · Python · pygal · anyplot.ai\",\n    x_title=\"Quarter\",\n    y_title=\"Revenue ($M)\",\n    fill=True,\n    show_dots=False,\n    show_x_guides=False,\n    show_y_guides=True,\n    legend_at_bottom=True,\n    margin=80,\n    spacing=40,\n)\n\nchart.x_labels = quarters\n\nchart.add(None, a_lower)\nchart.add(\"Product A (with 90% CI)\", a_center)\nchart.add(None, a_upper)\n\nchart.add(None, b_lower)\nchart.add(\"Product B (with 90% CI)\", b_center)\nchart.add(None, b_upper)\n\nchart.add(None, c_lower)\nchart.add(\"Product C (with 90% CI)\", c_center)\nchart.add(None, c_upper)\n\nchart.render_to_png(f\"plot-{THEME}.png\")\nwith open(f\"plot-{THEME}.html\", \"wb\") as f:\n    f.write(chart.render())\n"}