{"spec_id":"line-basic","library":"seaborn","language":"python","code":"\"\"\" anyplot.ai\nline-basic: Basic Line Plot\nLibrary: seaborn 0.13.2 | Python 3.13.13\nQuality: 91/100 | Updated: 2026-04-29\n\"\"\"\n\nimport os\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\n\n\n# Theme\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\"\nBRAND = \"#009E73\"\nACCENT = \"#C475FD\"  # Okabe-Ito position 2 — peak emphasis\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\n# Data — monthly temperatures across 5 years; seaborn aggregates mean + 95% CI\nnp.random.seed(42)\nmonths = np.arange(1, 13)\nmonth_labels = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\nrecords = []\nfor _year in range(2019, 2024):\n    base_temp = 15 + 12 * np.sin((months - 4) * np.pi / 6)\n    temps = base_temp + np.random.randn(12) * 2.5\n    for month, temp in zip(months, temps, strict=True):\n        records.append({\"Month\": month, \"Temperature (°C)\": temp})\n\ndf = pd.DataFrame(records)\n\n# Plot\nfig, ax = plt.subplots(figsize=(16, 9), facecolor=PAGE_BG)\nax.set_facecolor(PAGE_BG)\n\nsns.lineplot(\n    data=df,\n    x=\"Month\",\n    y=\"Temperature (°C)\",\n    ax=ax,\n    linewidth=3,\n    color=BRAND,\n    marker=\"o\",\n    markersize=12,\n    errorbar=\"ci\",\n    err_kws={\"alpha\": 0.20},\n    label=\"Mean ± 95% CI\",\n)\n\n# Highlight the summer peak (July) to focus the viewer on the seasonal maximum\npeak_month = 7\npeak_mean = df[df[\"Month\"] == peak_month][\"Temperature (°C)\"].mean()\nax.scatter(\n    [peak_month], [peak_mean], color=ACCENT, s=300, zorder=5, edgecolors=PAGE_BG, linewidth=2.5, label=\"Peak — July\"\n)\n\n# Style\nax.set_xlabel(\"Month\", fontsize=20, color=INK)\nax.set_ylabel(\"Temperature (°C)\", fontsize=20, color=INK)\nax.set_title(\n    \"Monthly Temperature Seasonality · line-basic · seaborn · anyplot.ai\", fontsize=24, fontweight=\"medium\", color=INK\n)\nax.tick_params(axis=\"both\", labelsize=16, colors=INK_SOFT)\nax.set_xticks(months)\nax.set_xticklabels(month_labels)\nax.yaxis.grid(True, alpha=0.10, linewidth=0.8)\nax.spines[\"top\"].set_visible(False)\nax.spines[\"right\"].set_visible(False)\nax.spines[\"left\"].set_color(INK_SOFT)\nax.spines[\"bottom\"].set_color(INK_SOFT)\n\nlegend = ax.legend(fontsize=16, framealpha=1.0)\nlegend.get_frame().set_facecolor(ELEVATED_BG)\nlegend.get_frame().set_edgecolor(INK_SOFT)\nfor text in legend.get_texts():\n    text.set_color(INK_SOFT)\n\nplt.tight_layout()\nplt.savefig(f\"plot-{THEME}.png\", dpi=300, bbox_inches=\"tight\", facecolor=PAGE_BG)\n"}