{"spec_id":"errorbar-basic","library":"letsplot","language":"python","code":"\"\"\" anyplot.ai\nerrorbar-basic: Basic Error Bar Plot\nLibrary: letsplot 4.11.0 | Python 3.13.14\nQuality: 89/100 | Updated: 2026-06-30\n\"\"\"\n\nimport os\n\nimport pandas as pd\nfrom lets_plot import (\n    LetsPlot,\n    aes,\n    element_blank,\n    element_line,\n    element_rect,\n    element_text,\n    geom_errorbar,\n    geom_point,\n    ggplot,\n    ggsave,\n    ggsize,\n    labs,\n    scale_color_manual,\n    theme,\n    theme_minimal,\n)\n\n\nLetsPlot.setup_html()\n\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\"\nELEVATED_BG = \"#FFFDF6\" if THEME == \"light\" else \"#242420\"\nRULE = \"#1A1A1726\" if THEME == \"light\" else \"#F0EFE826\"  # 15% opacity — subtle grid\n\nBRAND = \"#009E73\"  # Imprint palette position 1\nFOCAL = \"#C475FD\"  # Imprint palette position 2 — highlights group with largest spread\n\n# Data — clinical measurements comparing control vs treatment groups\ndata = pd.DataFrame(\n    {\n        \"experiment\": [\"Control\", \"Treatment A\", \"Treatment B\", \"Treatment C\", \"Treatment D\"],\n        \"mean_value\": [45.2, 52.8, 61.3, 48.7, 55.1],\n        \"error\": [4.5, 6.2, 5.8, 3.9, 7.1],\n    }\n)\ndata[\"ymin\"] = data[\"mean_value\"] - data[\"error\"]\ndata[\"ymax\"] = data[\"mean_value\"] + data[\"error\"]\n\nfocal_idx = data[\"error\"].idxmax()\ndata[\"highlight\"] = [\"focal\" if i == focal_idx else \"base\" for i in data.index]\n\ncolor_map = {\"base\": BRAND, \"focal\": FOCAL}\n\ntitle = \"errorbar-basic · python · letsplot · anyplot.ai\"\nsubtitle = (\n    \"Treatment D (highlighted) has the widest error margin (±7.1 mg/dL), indicating higher measurement variability\"\n)\n\nanyplot_theme = theme(\n    plot_background=element_rect(fill=PAGE_BG, color=PAGE_BG),\n    panel_background=element_rect(fill=PAGE_BG, color=PAGE_BG),\n    panel_border=element_blank(),\n    panel_grid_major_x=element_blank(),\n    panel_grid_minor=element_blank(),\n    panel_grid_major_y=element_line(color=RULE, size=0.3),\n    axis_line=element_line(color=INK_SOFT),\n    axis_ticks=element_line(color=INK_SOFT),\n    axis_title=element_text(color=INK, size=12),\n    axis_text=element_text(color=INK_SOFT, size=10),\n    plot_title=element_text(color=INK, size=16),\n    plot_subtitle=element_text(color=INK_SOFT, size=11),\n    legend_position=\"none\",\n)\n\nplot = (\n    ggplot(data, aes(x=\"experiment\", y=\"mean_value\", color=\"highlight\"))\n    + geom_errorbar(aes(ymin=\"ymin\", ymax=\"ymax\"), width=0.3, size=1.5)\n    + geom_point(size=6)\n    + scale_color_manual(values=color_map)\n    + labs(x=\"Experimental Group\", y=\"Measured Value (mg/dL)\", title=title, subtitle=subtitle)\n    + theme_minimal()\n    + anyplot_theme\n    + ggsize(800, 450)\n)\n\n# PNG (scale=4 → 3200 × 1800 px)\nggsave(plot, f\"plot-{THEME}.png\", scale=4, path=\".\")\n\n# HTML (interactive)\nggsave(plot, f\"plot-{THEME}.html\", path=\".\")\n"}