Languages in numbers
August 23, 2025Sometimes certain sentences stick in your mind. For me, one that recently came back is when a colleague once mentioned a Swiss person and immediately assumed they must speak German. It turned out, though, that this person spoke French, and only knew just enough German to order a pretzel at a bakery. That made me wonder: how common is this situation? Was the initial assumption a reasonable one to make in the first place? And what about the other national languages?
Because yes, in case you weren't aware, Switzerland officially recognizes four national languages: German, French, Italian, and Romansh (a Romance language of the Gallo-/Rhaeto-Romance branch, spoken mainly in the canton of Grisons/Graubünden, consisting of five dialects, each with its own standardized form). Each of these languages is concentrated in specific regions, generally influenced by the country they border (Germany, Austria, Lichtenstein, France, or Italy). These linguistic regions generally align with the canton boundaries, though in some cases a single canton can be multilingual (for example, Valais/Wallis and Grisons/Graubünden).
Switzerland is made up of 26 cantons (including the half-cantons). I wanted to visualize them, and Switzerland as a whole, so I looked for the proper way to represent all these elements. I eventually found official shapefiles from the Generalized administrative boundaries (G1) dataset provided by the Federal Statistical Office FSO. These shapefiles include data on the country, cantons, lakes, and municipalities of Switzerland. The dataset spans many years, from 1850 (!) to April 2025, but I decided to focus on the year 2000. The reason for this choice will become clear later.
I used the GeoPandas library for this task. Since I have already introduced this library in a previous post, I will not reintroduce it here. With the geographic data for the country, cantons, and lakes, I was able to produce the following map:
You'll probably notice a hatched area without an acronym: this is Liechtenstein. While it is included in the dataset, it will not be part of the analysis.
As the initial goal is to understand how languages are distributed across Switzerland, additional data were required. Fortunately, the FSO provided what I needed in the form of an Excel file containing the Data from federal population censuses since 1850, by municipality (in French: Données des recensements fédéraux de la population à partir de 1850 par commune). Interestingly, this dataset covers data up to the year 2000, with more recent years available only upon request, so this explains my focus on 2000. It includes various demographic characteristics, such as nationality, gender, age, and languages. For languages, only the first language is recorded. While this limits the analysis, since many people are multilingual, it still provides a usable dataset for my purposes.
Now that I had the number of speakers of each national language for every municipality along with their respective cantons, new possibilities opened up. I began examining the distribution of speakers across the 26 cantons. To do this, I counted the number of speakers of each language in every canton and divided it by the total population. I also included those whose first language is categorized as other. The table below provides a summary of the situation.
Canton | German [%] | French [%] | Italian [%] | Romansh [%] | Other [%] |
---|---|---|---|---|---|
AG | 87.31 | 0.80 | 3.49 | 0.12 | 8.27 |
AI | 92.87 | 0.23 | 1.06 | 0.10 | 5.74 |
AR | 91.07 | 0.38 | 1.91 | 0.16 | 6.47 |
BE | 84.48 | 7.62 | 2.11 | 0.07 | 5.71 |
BL | 87.59 | 1.57 | 3.59 | 0.09 | 7.16 |
BS | 79.62 | 2.49 | 5.17 | 0.12 | 12.59 |
FR | 29.87 | 63.00 | 1.23 | 0.04 | 5.85 |
GE | 4.20 | 76.56 | 4.23 | 0.07 | 14.94 |
GL | 86.82 | 0.34 | 4.40 | 0.15 | 8.29 |
GR | 68.83 | 0.49 | 10.30 | 14.83 | 5.55 |
JU | 4.53 | 89.57 | 2.05 | 0.04 | 3.81 |
LU | 89.25 | 0.58 | 2.09 | 0.12 | 7.95 |
NE | 4.36 | 84.51 | 3.71 | 0.07 | 7.36 |
NW | 92.84 | 0.64 | 1.50 | 0.14 | 4.88 |
OW | 92.62 | 0.47 | 1.08 | 0.12 | 5.72 |
SG | 88.05 | 0.39 | 2.59 | 0.19 | 8.78 |
SH | 87.67 | 0.55 | 2.81 | 0.12 | 8.85 |
SO | 88.53 | 1.00 | 3.38 | 0.08 | 7.01 |
SZ | 90.15 | 0.43 | 2.05 | 0.19 | 7.19 |
TG | 88.30 | 0.43 | 3.08 | 0.14 | 8.03 |
TI | 8.95 | 1.74 | 82.56 | 0.14 | 6.61 |
UR | 93.89 | 0.20 | 1.40 | 0.16 | 4.35 |
VD | 5.00 | 81.76 | 3.22 | 0.05 | 9.97 |
VS | 29.03 | 62.48 | 2.40 | 0.05 | 6.03 |
ZG | 85.69 | 1.20 | 2.66 | 0.17 | 10.29 |
ZH | 83.63 | 1.39 | 4.09 | 0.20 | 10.68 |
These figures confirm that most cantons are predominantly German-speaking, with only a few having a majority of French speakers, and just one dominated by Italian speakers. However, since cantons do not strictly define language boundaries, I needed to examine the situation at the municipal level. In 2000, there were 2899 municipalities (compared to 2121 in 2025), so I decided to map the percentages for each municipality, focusing solely on the national languages.
The lowest step of the scale is intentionally divided into two parts, with values between 0 and 2 percent shown in white to emphasize the very small number of speakers. A few observations emerge: the language regions are generally well-defined, but for German and Italian, low percentages are not confined to the 0-2% range: they are scattered throughout Switzerland. In contrast, French speakers do not exhibit this widespread distribution. And Romansh speakers are almost entirely confined to just one region
By taking the maximum percentage of each language in every municipality, it's possible to overlay the linguistic regions and cantons, resulting in the following map:
According to this result, 16 cantons have a German-speaking majority, 4 cantons have a French-speaking majority, and 1 canton has an Italian-speaking majority. Three cantons have two main languages (German and French), while one canton has three dominant languages (German, Italian, and Romansh).
I decided to try one more approach. Using Plotly, installed in the same way as GeoPandas, I was able to create an interactive map displaying the percentages for each municipality. After some trial and error, I finally produced the following interactive map: