{"spec_id":"scatter-marginal","library":"matplotlib","language":"python","code":"\"\"\" anyplot.ai\nscatter-marginal: Scatter Plot with Marginal Distributions\nLibrary: matplotlib 3.10.9 | Python 3.13.13\nQuality: 89/100 | Updated: 2026-05-09\n\"\"\"\n\nimport os\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nfrom matplotlib.gridspec import GridSpec\n\n\n# Theme tokens\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\"\nBRAND = \"#009E73\"\n\n# Data - correlated bivariate data with realistic pattern\nnp.random.seed(42)\nn = 200\n\n# Create correlated data with bimodal structure\nx = np.concatenate([np.random.normal(30, 8, n // 2), np.random.normal(60, 10, n // 2)])\ny = 0.7 * x + np.random.normal(0, 8, n) + 10\n\n# Create figure with GridSpec for layout\nfig = plt.figure(figsize=(16, 9), facecolor=PAGE_BG)\ngs = GridSpec(4, 4, figure=fig, hspace=0.05, wspace=0.05)\n\n# Main scatter plot (lower-left, 3x3)\nax_main = fig.add_subplot(gs[1:4, 0:3], facecolor=PAGE_BG)\nax_main.scatter(x, y, s=100, alpha=0.65, color=BRAND, edgecolors=PAGE_BG, linewidth=0.5)\nax_main.set_xlabel(\"Feature A\", fontsize=20, color=INK)\nax_main.set_ylabel(\"Feature B\", fontsize=20, color=INK)\nax_main.tick_params(axis=\"both\", labelsize=16, colors=INK_SOFT)\nax_main.yaxis.grid(True, alpha=0.10, linewidth=0.8, color=INK)\nfor s in (\"left\", \"bottom\"):\n    ax_main.spines[s].set_color(INK_SOFT)\nax_main.spines[\"top\"].set_visible(False)\nax_main.spines[\"right\"].set_visible(False)\n\n# Top marginal histogram (aligned with main x-axis)\nax_top = fig.add_subplot(gs[0, 0:3], sharex=ax_main, facecolor=PAGE_BG)\nax_top.hist(x, bins=25, color=BRAND, alpha=0.5, edgecolor=PAGE_BG, linewidth=0.5)\nax_top.tick_params(axis=\"x\", labelbottom=False, colors=INK_SOFT)\nax_top.tick_params(axis=\"y\", labelsize=14, colors=INK_SOFT)\nax_top.set_ylabel(\"Count\", fontsize=16, color=INK)\nax_top.spines[\"top\"].set_visible(False)\nax_top.spines[\"right\"].set_visible(False)\nfor s in (\"left\", \"bottom\"):\n    ax_top.spines[s].set_color(INK_SOFT)\nax_top.yaxis.grid(True, alpha=0.10, linewidth=0.8, color=INK)\n\n# Right marginal histogram (aligned with main y-axis)\nax_right = fig.add_subplot(gs[1:4, 3], sharey=ax_main, facecolor=PAGE_BG)\nax_right.hist(y, bins=25, orientation=\"horizontal\", color=BRAND, alpha=0.5, edgecolor=PAGE_BG, linewidth=0.5)\nax_right.tick_params(axis=\"y\", labelleft=False, colors=INK_SOFT)\nax_right.tick_params(axis=\"x\", labelsize=14, colors=INK_SOFT)\nax_right.set_xlabel(\"Count\", fontsize=16, color=INK)\nax_right.spines[\"top\"].set_visible(False)\nax_right.spines[\"right\"].set_visible(False)\nfor s in (\"left\", \"bottom\"):\n    ax_right.spines[s].set_color(INK_SOFT)\nax_right.xaxis.grid(True, alpha=0.10, linewidth=0.8, color=INK)\n\n# Title\nfig.text(\n    0.5,\n    0.98,\n    \"scatter-marginal · matplotlib · anyplot.ai\",\n    fontsize=24,\n    ha=\"center\",\n    va=\"top\",\n    color=INK,\n    fontweight=\"medium\",\n)\n\nplt.savefig(f\"plot-{THEME}.png\", dpi=300, bbox_inches=\"tight\", facecolor=PAGE_BG)\n"}