{"spec_id":"map-tilegrid","library":"altair","language":"python","code":"\"\"\" anyplot.ai\nmap-tilegrid: Tile Grid Map for Equal-Area Geographic Comparison\nLibrary: altair 6.1.0 | Python 3.13.13\nQuality: 90/100 | Created: 2026-05-14\n\"\"\"\n\nimport os\n\nimport altair as alt\nimport pandas as pd\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\n# Data — US states tile grid positions (row 0 = north) and renewable energy share (%)\nstate_grid = [\n    (\"ME\", 0, 11),\n    (\"NH\", 1, 10),\n    (\"VT\", 1, 9),\n    (\"WA\", 2, 0),\n    (\"MT\", 2, 1),\n    (\"ND\", 2, 2),\n    (\"MN\", 2, 3),\n    (\"WI\", 2, 4),\n    (\"MI\", 2, 6),\n    (\"NY\", 2, 8),\n    (\"MA\", 2, 10),\n    (\"RI\", 2, 11),\n    (\"OR\", 3, 0),\n    (\"ID\", 3, 1),\n    (\"WY\", 3, 2),\n    (\"SD\", 3, 3),\n    (\"IA\", 3, 4),\n    (\"IL\", 3, 5),\n    (\"IN\", 3, 6),\n    (\"OH\", 3, 7),\n    (\"PA\", 3, 8),\n    (\"NJ\", 3, 9),\n    (\"CT\", 3, 10),\n    (\"CA\", 4, 0),\n    (\"NV\", 4, 1),\n    (\"CO\", 4, 2),\n    (\"NE\", 4, 3),\n    (\"MO\", 4, 4),\n    (\"KY\", 4, 5),\n    (\"WV\", 4, 6),\n    (\"VA\", 4, 7),\n    (\"MD\", 4, 8),\n    (\"DE\", 4, 9),\n    (\"AZ\", 5, 1),\n    (\"UT\", 5, 2),\n    (\"KS\", 5, 3),\n    (\"AR\", 5, 4),\n    (\"TN\", 5, 5),\n    (\"NC\", 5, 6),\n    (\"SC\", 5, 7),\n    (\"DC\", 5, 8),\n    (\"NM\", 6, 2),\n    (\"OK\", 6, 3),\n    (\"LA\", 6, 4),\n    (\"MS\", 6, 5),\n    (\"AL\", 6, 6),\n    (\"GA\", 6, 7),\n    (\"FL\", 6, 8),\n    (\"AK\", 7, 0),\n    (\"HI\", 7, 1),\n    (\"TX\", 7, 3),\n]\n\nrenewable_share = {\n    \"AK\": 29,\n    \"AL\": 9,\n    \"AR\": 12,\n    \"AZ\": 20,\n    \"CA\": 36,\n    \"CO\": 34,\n    \"CT\": 6,\n    \"DC\": 3,\n    \"DE\": 12,\n    \"FL\": 14,\n    \"GA\": 12,\n    \"HI\": 37,\n    \"IA\": 59,\n    \"ID\": 57,\n    \"IL\": 13,\n    \"IN\": 10,\n    \"KS\": 43,\n    \"KY\": 9,\n    \"LA\": 9,\n    \"MA\": 18,\n    \"MD\": 14,\n    \"ME\": 79,\n    \"MI\": 13,\n    \"MN\": 28,\n    \"MO\": 12,\n    \"MS\": 5,\n    \"MT\": 50,\n    \"NC\": 14,\n    \"ND\": 34,\n    \"NE\": 24,\n    \"NH\": 27,\n    \"NJ\": 10,\n    \"NM\": 31,\n    \"NV\": 29,\n    \"NY\": 32,\n    \"OH\": 9,\n    \"OK\": 38,\n    \"OR\": 67,\n    \"PA\": 12,\n    \"RI\": 23,\n    \"SC\": 7,\n    \"SD\": 81,\n    \"TN\": 17,\n    \"TX\": 28,\n    \"UT\": 24,\n    \"VA\": 16,\n    \"VT\": 82,\n    \"WA\": 76,\n    \"WI\": 13,\n    \"WV\": 7,\n    \"WY\": 18,\n}\n\ndf = pd.DataFrame(state_grid, columns=[\"state\", \"row\", \"col\"])\ndf[\"value\"] = df[\"state\"].map(renewable_share)\n\n# Plot\nx_enc = alt.X(\"col:O\", scale=alt.Scale(paddingInner=0.04, paddingOuter=0), axis=None)\ny_enc = alt.Y(\"row:O\", scale=alt.Scale(paddingInner=0.04, paddingOuter=0), axis=None)\n\nbase = alt.Chart(df)\n\ntiles = base.mark_rect().encode(\n    x=x_enc,\n    y=y_enc,\n    color=alt.Color(\n        \"value:Q\",\n        scale=alt.Scale(scheme=\"viridis\"),\n        legend=alt.Legend(\n            title=\"Renewables %\", titleFontSize=18, labelFontSize=16, gradientLength=280, gradientThickness=18\n        ),\n    ),\n    tooltip=[alt.Tooltip(\"state:N\", title=\"State\"), alt.Tooltip(\"value:Q\", title=\"Renewable %\", format=\".0f\")],\n)\n\nlabels = base.mark_text(fontSize=22, fontWeight=\"bold\").encode(\n    x=x_enc,\n    y=y_enc,\n    text=\"state:N\",\n    color=alt.condition(\"datum.value > 50\", alt.value(\"#1A1A17\"), alt.value(\"#F0EFE8\")),\n)\n\nchart = (\n    alt.layer(tiles, labels)\n    .properties(\n        width=1600,\n        height=900,\n        title=\"US Renewable Energy Share · map-tilegrid · altair · anyplot.ai\",\n        background=PAGE_BG,\n    )\n    .configure_title(color=INK, fontSize=28, anchor=\"middle\", offset=16)\n    .configure_view(fill=PAGE_BG, stroke=None)\n    .configure_legend(fillColor=ELEVATED_BG, strokeColor=INK_SOFT, labelColor=INK_SOFT, titleColor=INK)\n)\n\n# Save\nchart.save(f\"plot-{THEME}.png\", scale_factor=3.0)\nchart.save(f\"plot-{THEME}.html\")\n"}