{"spec_id":"scatter-embedding","library":"plotnine","language":"python","code":"\"\"\" anyplot.ai\nscatter-embedding: t-SNE and UMAP Embedding Visualization\nLibrary: plotnine 0.15.7 | Python 3.13.14\nQuality: 90/100 | Updated: 2026-08-11\n\"\"\"\n\nimport os\n\nimport numpy as np\nimport pandas as pd\nfrom plotnine import (\n    aes,\n    coord_fixed,\n    element_blank,\n    element_line,\n    element_rect,\n    element_text,\n    geom_label,\n    geom_point,\n    ggplot,\n    labs,\n    scale_color_manual,\n    stat_ellipse,\n    theme,\n)\nfrom sklearn.datasets import make_blobs\nfrom sklearn.manifold import TSNE\n\n\n# Theme tokens\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\n# Imprint palette (canonical order, first series always brand green)\nIMPRINT = [\"#009E73\", \"#C475FD\", \"#4467A3\", \"#BD8233\", \"#AE3030\", \"#2ABCCD\"]\n\n# Data: single-cell RNA-seq-style clustering scenario (bioinformatics application)\nnp.random.seed(42)\ncell_types = [\"T cells\", \"B cells\", \"Monocytes\", \"NK cells\", \"Dendritic cells\", \"Neutrophils\"]\nn_clusters = len(cell_types)\nX, y = make_blobs(n_samples=1200, centers=n_clusters, cluster_std=1.2, random_state=42)\n\ntsne = TSNE(n_components=2, perplexity=30, random_state=42)\nembedding = tsne.fit_transform(X)\n\ndf = pd.DataFrame(\n    {\n        \"tsne_1\": embedding[:, 0],\n        \"tsne_2\": embedding[:, 1],\n        \"Cluster\": pd.Categorical([cell_types[i] for i in y], categories=cell_types),\n    }\n)\n\ncentroids = df.groupby(\"Cluster\", observed=True)[[\"tsne_1\", \"tsne_2\"]].mean().reset_index()\n\n# Plot\nanyplot_theme = theme(\n    figure_size=(8, 4.5),\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_blank(),\n    panel_border=element_blank(),\n    axis_line_x=element_line(color=INK_SOFT, size=0.8),\n    axis_line_y=element_line(color=INK_SOFT, size=0.8),\n    axis_title=element_text(color=INK, size=10),\n    axis_text=element_blank(),\n    axis_ticks=element_blank(),\n    plot_title=element_text(color=INK, size=12),\n    plot_subtitle=element_text(color=INK_SOFT, size=8),\n    legend_background=element_rect(fill=ELEVATED_BG, color=INK_SOFT),\n    legend_text=element_text(color=INK_SOFT, size=8),\n    legend_title=element_text(color=INK, size=9),\n    legend_key=element_rect(fill=PAGE_BG),\n    legend_margin=10,\n)\n\nplot = (\n    ggplot(df, aes(x=\"tsne_1\", y=\"tsne_2\", color=\"Cluster\"))\n    + geom_point(size=1.6, alpha=0.7)\n    + stat_ellipse(level=0.68, type=\"t\", size=0.5, alpha=0.6, linetype=\"dashed\", show_legend=False)\n    + geom_label(\n        data=centroids,\n        mapping=aes(x=\"tsne_1\", y=\"tsne_2\", label=\"Cluster\"),\n        inherit_aes=False,\n        size=3.0,\n        color=INK,\n        fill=ELEVATED_BG,\n        boxcolor=INK_SOFT,\n        fontweight=\"bold\",\n        show_legend=False,\n    )\n    + scale_color_manual(values=IMPRINT)\n    + coord_fixed(ratio=1)\n    + labs(\n        title=\"scatter-embedding · python · plotnine · anyplot.ai\",\n        subtitle=\"t-SNE (perplexity=30) · 1200 cells · 6 clusters\",\n        x=\"t-SNE Dimension 1\",\n        y=\"t-SNE Dimension 2\",\n    )\n    + anyplot_theme\n)\n\n# Save\nplot.save(f\"plot-{THEME}.png\", dpi=400, width=8, height=4.5, units=\"in\")\n"}