{"spec_id":"contour-decision-boundary","library":"seaborn","language":"python","code":"\"\"\" anyplot.ai\ncontour-decision-boundary: Decision Boundary Classifier Visualization\nLibrary: seaborn 0.13.2 | Python 3.13.13\nQuality: 92/100 | Updated: 2026-05-16\n\"\"\"\n\nimport os\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport seaborn as sns\nfrom matplotlib.lines import Line2D\nfrom matplotlib.patches import Patch\nfrom sklearn.datasets import make_moons\nfrom sklearn.svm import SVC\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\nBRAND = \"#009E73\"\nALT_COLOR = \"#C475FD\"\n\nnp.random.seed(42)\nX, y = make_moons(n_samples=200, noise=0.25, random_state=42)\nX1 = X[:, 0]\nX2 = X[:, 1]\n\nclf = SVC(kernel=\"rbf\", C=1.0, gamma=\"scale\")\nclf.fit(X, y)\n\nx1_min, x1_max = X1.min() - 0.5, X1.max() + 0.5\nx2_min, x2_max = X2.min() - 0.5, X2.max() + 0.5\nxx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max, 200), np.linspace(x2_min, x2_max, 200))\ngrid_points = np.c_[xx1.ravel(), xx2.ravel()]\n\nZ = clf.predict(grid_points).reshape(xx1.shape)\n\nfig, ax = plt.subplots(figsize=(16, 9), facecolor=PAGE_BG)\nax.set_facecolor(PAGE_BG)\n\nsns.set_theme(\n    style=\"ticks\",\n    rc={\n        \"figure.facecolor\": PAGE_BG,\n        \"axes.facecolor\": PAGE_BG,\n        \"axes.edgecolor\": INK_SOFT,\n        \"axes.labelcolor\": INK,\n        \"text.color\": INK,\n        \"xtick.color\": INK_SOFT,\n        \"ytick.color\": INK_SOFT,\n        \"grid.color\": INK,\n        \"grid.alpha\": 0.10,\n        \"legend.facecolor\": ELEVATED_BG,\n        \"legend.edgecolor\": INK_SOFT,\n    },\n)\n\ncontour = ax.contourf(xx1, xx2, Z, levels=[-0.5, 0.5, 1.5], colors=[BRAND, ALT_COLOR], alpha=0.3)\n\nax.contour(xx1, xx2, Z, levels=[0.5], colors=[INK_SOFT], linewidths=3)\n\npredictions = clf.predict(X)\ncorrect_mask = predictions == y\nincorrect_mask = ~correct_mask\n\nsns.scatterplot(\n    x=X1[correct_mask],\n    y=X2[correct_mask],\n    hue=y[correct_mask],\n    palette=[BRAND, ALT_COLOR],\n    s=200,\n    edgecolor=PAGE_BG,\n    linewidth=1.5,\n    alpha=0.9,\n    ax=ax,\n    legend=False,\n)\n\nif np.any(incorrect_mask):\n    ax.scatter(\n        X1[incorrect_mask],\n        X2[incorrect_mask],\n        s=300,\n        edgecolors=\"#BD8233\",\n        linewidths=3.5,\n        facecolors=\"none\",\n        alpha=0.95,\n        marker=\"o\",\n    )\n\nlegend_elements = [\n    Patch(facecolor=BRAND, alpha=0.3, edgecolor=INK_SOFT, label=\"Class 0 Region\"),\n    Patch(facecolor=ALT_COLOR, alpha=0.3, edgecolor=INK_SOFT, label=\"Class 1 Region\"),\n    Line2D(\n        [0],\n        [0],\n        marker=\"o\",\n        color=\"w\",\n        markerfacecolor=BRAND,\n        markersize=14,\n        markeredgecolor=PAGE_BG,\n        markeredgewidth=1.5,\n        label=\"Class 0 (correct)\",\n    ),\n    Line2D(\n        [0],\n        [0],\n        marker=\"o\",\n        color=\"w\",\n        markerfacecolor=ALT_COLOR,\n        markersize=14,\n        markeredgecolor=PAGE_BG,\n        markeredgewidth=1.5,\n        label=\"Class 1 (correct)\",\n    ),\n    Line2D(\n        [0],\n        [0],\n        marker=\"o\",\n        color=\"w\",\n        markerfacecolor=\"none\",\n        markersize=14,\n        markeredgecolor=\"#BD8233\",\n        markeredgewidth=3.5,\n        label=\"Misclassified\",\n    ),\n]\nax.legend(handles=legend_elements, loc=\"upper right\", fontsize=14, framealpha=0.95)\n\nax.set_xlabel(\"Feature 1 (Normalized)\", fontsize=20, color=INK)\nax.set_ylabel(\"Feature 2 (Normalized)\", fontsize=20, color=INK)\nax.set_title(\"contour-decision-boundary · seaborn · anyplot.ai\", fontsize=24, color=INK)\nax.tick_params(axis=\"both\", labelsize=16, colors=INK_SOFT)\n\naccuracy = np.mean(predictions == y) * 100\nax.text(\n    0.02,\n    0.98,\n    f\"SVM Accuracy: {accuracy:.1f}%\",\n    transform=ax.transAxes,\n    fontsize=16,\n    verticalalignment=\"top\",\n    fontweight=\"bold\",\n    bbox={\"boxstyle\": \"round\", \"facecolor\": ELEVATED_BG, \"alpha\": 0.95, \"edgecolor\": INK_SOFT},\n    color=INK,\n)\n\nax.spines[\"top\"].set_visible(False)\nax.spines[\"right\"].set_visible(False)\n\nplt.tight_layout()\nplt.savefig(f\"plot-{THEME}.png\", dpi=300, bbox_inches=\"tight\", facecolor=PAGE_BG)\n"}