{"spec_id":"stem-basic","library":"chartjs","language":"javascript","code":"// anyplot.ai\n// stem-basic: Basic Stem Plot\n// Library: chartjs 4.4.7 | JavaScript 22.23.1\n// Quality: 86/100 | Created: 2026-07-25\n\nconst t = window.ANYPLOT_TOKENS;\n\n// --- Data (in-memory, deterministic) ----------------------------------------\n// Poisson probability mass function, lambda = 6 emails/hour, k = 0..19.\nconst LAMBDA = 6;\nconst counts = Array.from({ length: 20 }, (_, k) => k);\nconst probabilities = [];\nlet p = Math.exp(-LAMBDA);\nfor (const k of counts) {\n  if (k > 0) p = (p * LAMBDA) / k;\n  probabilities.push(p);\n}\nconst labels = counts.map((k) => k.toString());\n\n// --- Mount -------------------------------------------------------------------\nconst canvas = document.createElement(\"canvas\");\ndocument.getElementById(\"container\").appendChild(canvas);\n\n// --- Chart (bar stems + point-only line dataset draws the markers) ----------\nnew Chart(canvas, {\n  data: {\n    labels,\n    datasets: [\n      {\n        type: \"bar\",\n        label: \"Probability\",\n        data: probabilities,\n        backgroundColor: t.palette[0],\n        borderWidth: 0,\n        barThickness: 5,\n      },\n      {\n        type: \"line\",\n        label: \"Probability\",\n        data: probabilities,\n        showLine: false,\n        pointRadius: 9,\n        pointBackgroundColor: t.palette[0],\n        pointBorderColor: t.pageBg,\n        pointBorderWidth: 2,\n      },\n    ],\n  },\n  options: {\n    responsive: true,\n    maintainAspectRatio: false,\n    animation: false,\n    plugins: {\n      title: {\n        display: true,\n        text: \"stem-basic · javascript · chartjs · anyplot.ai\",\n        color: t.ink,\n        font: { size: 22 },\n        padding: { bottom: 24 },\n      },\n      legend: { display: false },\n    },\n    scales: {\n      x: {\n        ticks: { color: t.inkSoft, font: { size: 14 } },\n        grid: { display: false },\n        title: { display: true, text: \"Emails Received per Hour (k)\", color: t.ink, font: { size: 16 } },\n      },\n      y: {\n        beginAtZero: true,\n        ticks: {\n          color: t.inkSoft,\n          font: { size: 14 },\n          callback: (v) => v.toFixed(2),\n        },\n        grid: { color: t.grid },\n        title: { display: true, text: \"P(X = k)\", color: t.ink, font: { size: 16 } },\n      },\n    },\n  },\n});\n"}