🗺️ How to Build a Europe Tile Map in Tableau
If you’ve read my USA Tile Map post, you already know the concept: instead of plotting countries on a geographic map — where large countries visually dominate and small ones disappear — a tile map assigns every country an equal-sized cell on a grid, positioned to loosely mirror the real geography.
For the USA, this is a solved problem. There are dozens of well-established tile map layouts used in TV broadcasts, political communications, and newsrooms. When you search for US state tile map coordinates in Tableau, you have plenty of options.
For Europe, the situation is completely different.
European tile map layouts are surprisingly rare. The continent is geographically irregular, with microstates (Monaco, Liechtenstein, Vatican City, San Marino), island nations (Cyprus, Malta, Iceland), and a non-rectangular overall shape that makes grid placement genuinely difficult. Getting a layout that feels geographically intuitive — where the viewer’s spatial memory of Europe isn’t confused by the tile positions — takes real iteration.
I spent several days working through this with colleagues, tweaking positions, comparing to the actual map, and adjusting until the layout felt right. This post shares the result: a 47-country European tile map with all five calculated fields, ready to drop into any Tableau workbook.
🎯 The Viz That Started It All
I used this tile map layout to visualise the Spartacus Gay Travel Index 2023 — a ranking of 47 European countries by their LGBTQ+ friendliness, based on 6 criteria including anti-discrimination laws, marriage equality, adoption rights, and local hostility levels.
The tile map was the right choice here for exactly the same reason it works for the USA: every country gets equal visual weight. Malta, Luxembourg, and Monaco are just as visible as France, Germany, and Ukraine.
Interactive — hover over any country to see the score. Open full screen on Tableau Public →
⚙️ The Five Calculated Fields
The technique is identical to the USA Tile Map approach — four coordinate calculations plus one bonus field for flag images. Create each one in Tableau via Analysis → Create Calculated Field.
Calculation 1 — Country Abbreviation
Maps full country names to their ISO Alpha-2 country codes. Used as the tile label — two-letter codes keep tiles readable at any size.
▶ Country Abbreviation — Full CASE WHEN
CASE [Country Name] WHEN 'Albania' THEN 'AL' WHEN 'Andorra' THEN 'AD' WHEN 'Austria' THEN 'AT' WHEN 'Belarus' THEN 'BY' WHEN 'Belgium' THEN 'BE' WHEN 'Bosnia and Herzegovina' THEN 'BA' WHEN 'Bulgaria' THEN 'BG' WHEN 'Croatia' THEN 'HR' WHEN 'Czech Republic' THEN 'CZ' WHEN 'Cyprus' THEN 'CY' WHEN 'Denmark' THEN 'DK' WHEN 'Estonia' THEN 'EE' WHEN 'Finland' THEN 'FI' WHEN 'France' THEN 'FR' WHEN 'Germany' THEN 'DE' WHEN 'Greece' THEN 'GR' WHEN 'Hungary' THEN 'HU' WHEN 'Iceland' THEN 'IS' WHEN 'Ireland' THEN 'IE' WHEN 'Italy' THEN 'IT' WHEN 'Kosovo' THEN 'XK' WHEN 'Latvia' THEN 'LV' WHEN 'Liechtenstein' THEN 'LI' WHEN 'Lithuania' THEN 'LT' WHEN 'Luxembourg' THEN 'LU' WHEN 'Malta' THEN 'MT' WHEN 'Moldova' THEN 'MD' WHEN 'Monaco' THEN 'MC' WHEN 'Montenegro' THEN 'ME' WHEN 'Netherlands' THEN 'NL' WHEN 'North Macedonia' THEN 'MK' WHEN 'Norway' THEN 'NO' WHEN 'Poland' THEN 'PL' WHEN 'Portugal' THEN 'PT' WHEN 'Romania' THEN 'RO' WHEN 'Russia' THEN 'RU' WHEN 'San Marino' THEN 'SM' WHEN 'Serbia' THEN 'RS' WHEN 'Slovakia' THEN 'SK' WHEN 'Slovenia' THEN 'SI' WHEN 'Spain' THEN 'ES' WHEN 'Sweden' THEN 'SE' WHEN 'Switzerland' THEN 'CH' WHEN 'Türkiye' THEN 'TR' WHEN 'Ukraine' THEN 'UA' WHEN 'United Kingdom' THEN 'GB' WHEN 'Vatican City' THEN 'VA' END
Calculation 2 — Country Name
The reverse mapping — from country code to full name. Useful if your data source uses ISO codes rather than full names.
▶ Country Name — Full CASE WHEN
CASE [Country ABR] WHEN 'AL' THEN 'Albania' WHEN 'AD' THEN 'Andorra' WHEN 'AT' THEN 'Austria' WHEN 'BY' THEN 'Belarus' WHEN 'BE' THEN 'Belgium' WHEN 'BA' THEN 'Bosnia and Herzegovina' WHEN 'BG' THEN 'Bulgaria' WHEN 'HR' THEN 'Croatia' WHEN 'CZ' THEN 'Czech Republic' WHEN 'CY' THEN 'Cyprus' WHEN 'DK' THEN 'Denmark' WHEN 'EE' THEN 'Estonia' WHEN 'FI' THEN 'Finland' WHEN 'FR' THEN 'France' WHEN 'DE' THEN 'Germany' WHEN 'GR' THEN 'Greece' WHEN 'HU' THEN 'Hungary' WHEN 'IS' THEN 'Iceland' WHEN 'IE' THEN 'Ireland' WHEN 'IT' THEN 'Italy' WHEN 'XK' THEN 'Kosovo' WHEN 'LV' THEN 'Latvia' WHEN 'LI' THEN 'Liechtenstein' WHEN 'LT' THEN 'Lithuania' WHEN 'LU' THEN 'Luxembourg' WHEN 'MT' THEN 'Malta' WHEN 'MD' THEN 'Moldova' WHEN 'MC' THEN 'Monaco' WHEN 'ME' THEN 'Montenegro' WHEN 'NL' THEN 'Netherlands' WHEN 'MK' THEN 'North Macedonia' WHEN 'NO' THEN 'Norway' WHEN 'PL' THEN 'Poland' WHEN 'PT' THEN 'Portugal' WHEN 'RO' THEN 'Romania' WHEN 'RU' THEN 'Russia' WHEN 'SM' THEN 'San Marino' WHEN 'RS' THEN 'Serbia' WHEN 'SK' THEN 'Slovakia' WHEN 'SI' THEN 'Slovenia' WHEN 'ES' THEN 'Spain' WHEN 'SE' THEN 'Sweden' WHEN 'CH' THEN 'Switzerland' WHEN 'TR' THEN 'Türkiye' WHEN 'UA' THEN 'Ukraine' WHEN 'GB' THEN 'United Kingdom' WHEN 'VA' THEN 'Vatican City' END
Calculation 3 — Column (X coordinate)
Places each country along the horizontal axis. Values range from 0 (far west — Iceland, Ireland, Portugal) to 9 (far east — Bulgaria, Moldova, Russia, Türkiye).
▶ Column — Full CASE WHEN
CASE [Country Name] WHEN 'Albania' THEN 7 WHEN 'Andorra' THEN 2 WHEN 'Austria' THEN 6 WHEN 'Belarus' THEN 8 WHEN 'Belgium' THEN 3 WHEN 'Bosnia and Herzegovina' THEN 7 WHEN 'Bulgaria' THEN 9 WHEN 'Croatia' THEN 7 WHEN 'Czech Republic' THEN 6 WHEN 'Cyprus' THEN 9 WHEN 'Denmark' THEN 5 WHEN 'Estonia' THEN 8 WHEN 'Finland' THEN 8 WHEN 'France' THEN 3 WHEN 'Germany' THEN 5 WHEN 'Greece' THEN 8 WHEN 'Hungary' THEN 7 WHEN 'Iceland' THEN 0 WHEN 'Ireland' THEN 0 WHEN 'Italy' THEN 5 WHEN 'Kosovo' THEN 8 WHEN 'Latvia' THEN 8 WHEN 'Liechtenstein' THEN 5 WHEN 'Lithuania' THEN 8 WHEN 'Luxembourg' THEN 4 WHEN 'Malta' THEN 4 WHEN 'Moldova' THEN 9 WHEN 'Monaco' THEN 3 WHEN 'Montenegro' THEN 7 WHEN 'Netherlands' THEN 4 WHEN 'North Macedonia' THEN 8 WHEN 'Norway' THEN 6 WHEN 'Poland' THEN 7 WHEN 'Portugal' THEN 0 WHEN 'Romania' THEN 8 WHEN 'Russia' THEN 9 WHEN 'San Marino' THEN 5 WHEN 'Serbia' THEN 8 WHEN 'Slovakia' THEN 7 WHEN 'Slovenia' THEN 6 WHEN 'Spain' THEN 1 WHEN 'Sweden' THEN 7 WHEN 'Switzerland' THEN 4 WHEN 'Türkiye' THEN 9 WHEN 'Ukraine' THEN 8 WHEN 'United Kingdom' THEN 1 WHEN 'Vatican City' THEN 5 END
Calculation 4 — Row (Y coordinate)
Places each country along the vertical axis. Row 1 is the south (Malta, Cyprus, Greece), Row 13 is the far north (Iceland, Finland, Norway, Sweden).
▶ Row — Full CASE WHEN
CASE [Country Name] WHEN 'Albania' THEN 2 WHEN 'Andorra' THEN 5 WHEN 'Austria' THEN 6 WHEN 'Belarus' THEN 8 WHEN 'Belgium' THEN 7 WHEN 'Bosnia and Herzegovina' THEN 4 WHEN 'Bulgaria' THEN 5 WHEN 'Croatia' THEN 5 WHEN 'Czech Republic' THEN 7 WHEN 'Cyprus' THEN 1 WHEN 'Denmark' THEN 8 WHEN 'Estonia' THEN 11 WHEN 'Finland' THEN 12 WHEN 'France' THEN 6 WHEN 'Germany' THEN 7 WHEN 'Greece' THEN 2 WHEN 'Hungary' THEN 6 WHEN 'Iceland' THEN 13 WHEN 'Ireland' THEN 10 WHEN 'Italy' THEN 5 WHEN 'Kosovo' THEN 4 WHEN 'Latvia' THEN 9 WHEN 'Liechtenstein' THEN 6 WHEN 'Lithuania' THEN 10 WHEN 'Luxembourg' THEN 7 WHEN 'Malta' THEN 1 WHEN 'Moldova' THEN 6 WHEN 'Monaco' THEN 5 WHEN 'Montenegro' THEN 3 WHEN 'Netherlands' THEN 8 WHEN 'North Macedonia' THEN 3 WHEN 'Norway' THEN 12 WHEN 'Poland' THEN 8 WHEN 'Portugal' THEN 4 WHEN 'Romania' THEN 6 WHEN 'Russia' THEN 8 WHEN 'San Marino' THEN 4 WHEN 'Serbia' THEN 5 WHEN 'Slovakia' THEN 7 WHEN 'Slovenia' THEN 5 WHEN 'Spain' THEN 4 WHEN 'Sweden' THEN 12 WHEN 'Switzerland' THEN 6 WHEN 'Türkiye' THEN 4 WHEN 'Ukraine' THEN 7 WHEN 'United Kingdom' THEN 10 WHEN 'Vatican City' THEN 3 END
Calculation 5 — Country Flags (Bonus)
This is the field that makes the viz stand out. Using a free open-source SVG flag library hosted on GitHub, each tile can display a circular country flag as a shape mark instead of — or alongside — the country code label.
The flags come from hatscripts/circle-flags — a clean, consistently styled circular flag set with good coverage including Kosovo (xk).
To use it: drag this calculated field to Shape on the Marks card and set the mark type to Shape. Then assign the URL field as a custom shape using Tableau’s shape palette, or use it in a tooltip.
▶ Country Flags — Full CASE WHEN
CASE [Country Name] WHEN 'Albania' THEN 'https://hatscripts.github.io/circle-flags/flags/al.svg' WHEN 'Andorra' THEN 'https://hatscripts.github.io/circle-flags/flags/ad.svg' WHEN 'Austria' THEN 'https://hatscripts.github.io/circle-flags/flags/at.svg' WHEN 'Belarus' THEN 'https://hatscripts.github.io/circle-flags/flags/by.svg' WHEN 'Belgium' THEN 'https://hatscripts.github.io/circle-flags/flags/be.svg' WHEN 'Bosnia and Herzegovina' THEN 'https://hatscripts.github.io/circle-flags/flags/ba.svg' WHEN 'Bulgaria' THEN 'https://hatscripts.github.io/circle-flags/flags/bg.svg' WHEN 'Croatia' THEN 'https://hatscripts.github.io/circle-flags/flags/hr.svg' WHEN 'Czech Republic' THEN 'https://hatscripts.github.io/circle-flags/flags/cz.svg' WHEN 'Cyprus' THEN 'https://hatscripts.github.io/circle-flags/flags/cy.svg' WHEN 'Denmark' THEN 'https://hatscripts.github.io/circle-flags/flags/dk.svg' WHEN 'Estonia' THEN 'https://hatscripts.github.io/circle-flags/flags/ee.svg' WHEN 'Finland' THEN 'https://hatscripts.github.io/circle-flags/flags/fi.svg' WHEN 'France' THEN 'https://hatscripts.github.io/circle-flags/flags/fr.svg' WHEN 'Germany' THEN 'https://hatscripts.github.io/circle-flags/flags/de.svg' WHEN 'Greece' THEN 'https://hatscripts.github.io/circle-flags/flags/gr.svg' WHEN 'Hungary' THEN 'https://hatscripts.github.io/circle-flags/flags/hu.svg' WHEN 'Iceland' THEN 'https://hatscripts.github.io/circle-flags/flags/is.svg' WHEN 'Ireland' THEN 'https://hatscripts.github.io/circle-flags/flags/ie.svg' WHEN 'Italy' THEN 'https://hatscripts.github.io/circle-flags/flags/it.svg' WHEN 'Kosovo' THEN 'https://hatscripts.github.io/circle-flags/flags/xk.svg' WHEN 'Latvia' THEN 'https://hatscripts.github.io/circle-flags/flags/lv.svg' WHEN 'Liechtenstein' THEN 'https://hatscripts.github.io/circle-flags/flags/li.svg' WHEN 'Lithuania' THEN 'https://hatscripts.github.io/circle-flags/flags/lt.svg' WHEN 'Luxembourg' THEN 'https://hatscripts.github.io/circle-flags/flags/lu.svg' WHEN 'Malta' THEN 'https://hatscripts.github.io/circle-flags/flags/mt.svg' WHEN 'Moldova' THEN 'https://hatscripts.github.io/circle-flags/flags/md.svg' WHEN 'Monaco' THEN 'https://hatscripts.github.io/circle-flags/flags/mc.svg' WHEN 'Montenegro' THEN 'https://hatscripts.github.io/circle-flags/flags/me.svg' WHEN 'Netherlands' THEN 'https://hatscripts.github.io/circle-flags/flags/nl.svg' WHEN 'North Macedonia' THEN 'https://hatscripts.github.io/circle-flags/flags/mk.svg' WHEN 'Norway' THEN 'https://hatscripts.github.io/circle-flags/flags/no.svg' WHEN 'Poland' THEN 'https://hatscripts.github.io/circle-flags/flags/pl.svg' WHEN 'Portugal' THEN 'https://hatscripts.github.io/circle-flags/flags/pt.svg' WHEN 'Romania' THEN 'https://hatscripts.github.io/circle-flags/flags/ro.svg' WHEN 'Russia' THEN 'https://hatscripts.github.io/circle-flags/flags/ru.svg' WHEN 'San Marino' THEN 'https://hatscripts.github.io/circle-flags/flags/sm.svg' WHEN 'Serbia' THEN 'https://hatscripts.github.io/circle-flags/flags/rs.svg' WHEN 'Slovakia' THEN 'https://hatscripts.github.io/circle-flags/flags/sk.svg' WHEN 'Slovenia' THEN 'https://hatscripts.github.io/circle-flags/flags/si.svg' WHEN 'Spain' THEN 'https://hatscripts.github.io/circle-flags/flags/es.svg' WHEN 'Sweden' THEN 'https://hatscripts.github.io/circle-flags/flags/se.svg' WHEN 'Switzerland' THEN 'https://hatscripts.github.io/circle-flags/flags/ch.svg' WHEN 'Türkiye' THEN 'https://hatscripts.github.io/circle-flags/flags/tr.svg' WHEN 'Ukraine' THEN 'https://hatscripts.github.io/circle-flags/flags/ua.svg' WHEN 'United Kingdom' THEN 'https://hatscripts.github.io/circle-flags/flags/gb.svg' WHEN 'Vatican City' THEN 'https://hatscripts.github.io/circle-flags/flags/va.svg' END
🛠 Step 2: Build the View
Once all five fields are created, the build process is identical to the USA tile map:
- Drag Column to Columns and Row to Rows
- Right-click both pills → set to Dimension (not Measure)
- Change the mark type to Square
- Drag Country Abbreviation to Label — centre-align it
- Drag your metric to Color
- Right-click both axes → deselect Show Header to hide the numeric labels
💡 Using the flag calculation
The flags field returns a URL. To display flags as shapes, you need to download the SVG files and load them into your Tableau Shapes folder (Documents → My Tableau Repository → Shapes). Name each file to match what your calculation returns, then assign the field to the Shape mark. Alternatively, use the URL in a tooltip image for a cleaner approach that doesn't require local files.
🤔 Why European Tile Maps Are Harder Than US Ones
A few layout decisions worth explaining — because if you want to adapt this for your own use, understanding the tradeoffs helps.
The microstate problem. Monaco, Liechtenstein, San Marino, and Vatican City all need their own tile despite being smaller than most cities. Placing them on the grid requires finding positions that don’t displace their larger neighbours. These were some of the hardest positions to finalise — they kept pushing Italy, France, and Switzerland out of plausible locations.
Iceland and the Atlantic fringe. Iceland sits at Column 0, Row 13 — the top-left corner. It’s geographically accurate in relative terms but feels visually isolated in a way that Alaska never does on a US tile map, because Alaska at least sits adjacent to the continental grid. Ireland and the UK also sit at Column 0–1, which compresses the western fringe significantly.
The Balkans. The western Balkans pack six countries (Slovenia, Croatia, Bosnia, Montenegro, Serbia, North Macedonia) into a narrow geographic band. Getting their relative positions to feel right took the most iterations. The current layout isn’t perfect — no layout can be when this many small countries share borders — but it preserves the north-to-south sequence reliably.
Russia. Russia is geographically enormous but only gets one tile. Its placement at Column 9, Row 8 puts it roughly where its European territory sits — east of the Baltic states and Ukraine — while acknowledging it can’t represent the full country.
🔑 The Key Insight
The lack of established European tile map layouts isn’t a technical limitation — it’s a gap that simply hasn’t been filled. The US layout has been iterated on by newsrooms and data journalists for over a decade. Europe hasn’t had the same investment.
This layout covers all 47 countries I needed for the Spartacus dataset. If you’re working with a subset — EU members only, Western Europe, or a different regional cut — you can drop the irrelevant countries and the grid will still hold its shape.
Copy the calculations, adapt the coordinates if you need to, and share what you build.
Built something with this layout?
I'd love to see what you make with it. Share it with me on LinkedIn or drop a comment below.
Connect on LinkedIn →