{"spec_id":"map-tilegrid","library":"letsplot","language":"python","code":"\"\"\" anyplot.ai\nmap-tilegrid: Tile Grid Map for Equal-Area Geographic Comparison\nLibrary: letsplot 4.11.0 | Python 3.13.15\nQuality: 92/100 | Created: 2026-08-24\n\"\"\"\n\nimport os\n\nimport numpy as np\nimport pandas as pd\nfrom lets_plot import *\n\n\nLetsPlot.setup_html()\n\n# Theme tokens (see prompts/default-style-guide.md \"Background\" + \"Theme-adaptive Chrome\")\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 — renewable energy share (%) of gross final energy consumption, European countries\n# region: (grid_row, grid_col, approximate_share)\ncountries = {\n    \"IS\": (0, 2, 78),\n    \"NO\": (1, 4, 71),\n    \"SE\": (1, 5, 66),\n    \"FI\": (1, 6, 52),\n    \"IE\": (2, 0, 14),\n    \"UK\": (2, 1, 21),\n    \"DK\": (2, 4, 43),\n    \"EE\": (2, 7, 32),\n    \"NL\": (3, 1, 15),\n    \"DE\": (3, 3, 21),\n    \"PL\": (3, 4, 17),\n    \"LV\": (3, 7, 44),\n    \"BE\": (4, 1, 14),\n    \"LU\": (4, 2, 12),\n    \"CZ\": (4, 3, 18),\n    \"SK\": (4, 4, 19),\n    \"LT\": (4, 7, 29),\n    \"FR\": (5, 1, 20),\n    \"CH\": (5, 3, 30),\n    \"AT\": (5, 4, 40),\n    \"HU\": (5, 5, 16),\n    \"RO\": (5, 6, 27),\n    \"PT\": (6, 0, 39),\n    \"ES\": (6, 1, 22),\n    \"IT\": (6, 3, 21),\n    \"SI\": (6, 4, 26),\n    \"HR\": (6, 5, 32),\n    \"BG\": (6, 6, 22),\n    \"MT\": (7, 3, 13),\n    \"GR\": (7, 5, 24),\n}\n\nnp.random.seed(42)\nregion = list(countries.keys())\ngrid_row = [v[0] for v in countries.values()]\ngrid_col = [v[1] for v in countries.values()]\nbase_share = np.array([v[2] for v in countries.values()], dtype=float)\nrenewable_share = np.clip(base_share + np.random.normal(0, 2.5, len(region)), 5, 90)\n\ndf = pd.DataFrame({\"region\": region, \"grid_row\": grid_row, \"grid_col\": grid_col, \"renewable_share\": renewable_share})\n\n# Per-tile label color: pick ink or off-white depending on the imprint_seq fill's\n# luminance at that value, so labels stay legible across the whole gradient\nimprint_seq_low = np.array([0x00, 0x9E, 0x73])\nimprint_seq_high = np.array([0x44, 0x67, 0xA3])\nnorm_share = (df[\"renewable_share\"] - df[\"renewable_share\"].min()) / (\n    df[\"renewable_share\"].max() - df[\"renewable_share\"].min()\n)\nfill_rgb = imprint_seq_low[None, :] + norm_share.to_numpy()[:, None] * (imprint_seq_high - imprint_seq_low)[None, :]\nfill_luminance = 0.299 * fill_rgb[:, 0] + 0.587 * fill_rgb[:, 1] + 0.114 * fill_rgb[:, 2]\ndf[\"label_color\"] = np.where(fill_luminance > 140, \"#1A1A17\", \"#F0EFE8\")\n\n# Plot — see default-style-guide.md \"Visual Sizing Defaults\" for the canvas + sizing values\ntitle = \"Renewable Energy Share · map-tilegrid · python · letsplot · anyplot.ai\"\ntitle_fontsize = round(16 * min(1.0, 67 / len(title)))\n\nplot = (\n    ggplot(df, aes(x=\"grid_col\", y=\"grid_row\"))\n    + geom_tile(aes(fill=\"renewable_share\"), width=0.92, height=0.92)\n    + geom_text(aes(label=\"region\", color=\"label_color\"), size=4.2, fontface=\"bold\")\n    + scale_color_identity()\n    + scale_fill_gradient(low=\"#009E73\", high=\"#4467A3\", name=\"Renewable share (%)\")\n    + scale_y_reverse()\n    + coord_fixed()\n    + labs(x=\"\", y=\"\", title=title)\n    + ggsize(800, 450)\n)\n\nanyplot_theme = theme(\n    plot_background=element_rect(fill=PAGE_BG, color=PAGE_BG),\n    panel_background=element_rect(fill=PAGE_BG),\n    panel_border=element_rect(color=INK_SOFT, size=0.5),\n    panel_grid=element_blank(),\n    axis_title=element_blank(),\n    axis_text=element_blank(),\n    axis_ticks=element_blank(),\n    axis_line=element_blank(),\n    plot_title=element_text(color=INK, size=title_fontsize),\n    legend_background=element_rect(fill=ELEVATED_BG, color=INK_SOFT),\n    legend_text=element_text(color=INK_SOFT, size=10),\n    legend_title=element_text(color=INK, size=11),\n)\n\nplot = plot + anyplot_theme\n\n# Save\nggsave(plot, f\"plot-{THEME}.png\", path=\".\", scale=4)\nggsave(plot, f\"plot-{THEME}.html\", path=\".\")\n"}