--- title: Renting a new apartment now takes a bigger share of pay in western than in eastern Germany description: Rent on a new 50 m² apartment takes 24.0% of median net pay in western Germany and 21.6% in the East (excl. Berlin). In 2014 it was the reverse. canonical: https://www.datapulse.de/en/rent-burden-germany-east-west/ author: Maria Fernandez published: 2026-09-29T12:28:29+00:00 modified: 2026-10-05T10:47:44+00:00 section: Economy language: en-US publisher: DataPulse Research image: https://www.datapulse.de/wp-content/uploads/2026/10/rent-burden-east-west-berlin-germany-2014-2025.png --- # Renting a new apartment now takes a bigger share of pay in western than in eastern Germany Change since 2014 The map shows how the rent burden has changed since 2014 in each of Germany’s 400 districts and independent cities (Kreise and kreisfreie Städte), the country’s county-level areas. The rent burden, or rent-to-income ratio, is the share of net income spent on rent. Blue means it rose, red means it fell. In the West, it rose in **323 of 324** districts and independent cities. In the East, it rose in only **22 of 75**. In the other 53, it fell or stayed the same. East and West In 2014, the rent burden was still higher in the East than in the West: 21.6% versus 20.3%. The calculation compares the warm rent (rent including heating and service charges) of a newly rented apartment with the net income of a single person on the median full-time wage. “East” means the five eastern states without Berlin. Berlin gets its own section below. Since 2017, the rent burden has been higher in the West. It kept rising there until 2023, to 24.1%, and has held at about 24% since. In the East, it stayed between 21.0% and 22.1%. In 2025, the rent burden in the West was 3.7 percentage points higher than in 2014. In the East, it was back at its 2014 level of 21.6%. Rents themselves have always been higher in the West. In 2025, the warm rent for the 50 m² apartment averaged around €644 a month there, against around €495 in the East. Rents versus wages The reason is that rents and wages grew at different speeds. In western districts, advertised rents for new leases rose by 61% between 2014 and 2025, net wages by 36%. In the East, the two moved almost in step: rents rose by 47%, net wages by 48%. Berlin Berlin, shown separately, follows its own path. Its rent burden rose from 25.8% in 2014 to 34.0% in 2024. In 2025, it fell to 32.2%. This was the first decline since 2020. Advertised rents rose by only 0.3% in 2025, while net wages rose by 6.2%. Investitionsbank Berlin, the city’s state development bank, also finds advertised rents almost unchanged in its [housing market report](https://www.ibb.de/de/ueber-uns/publikationen/wohnungsmarktbericht/2025.html) (in German). Rent burden today The first map showed how the rent burden has changed since 2014. This map shows where it stands now: the darker the color, the larger the share of income that goes to rent. This study counts a rent burden above 30% as high. In 2025, that applied to 26 districts and independent cities: 15 of them in Bavaria, seven in Berlin and Brandenburg. Around Berlin In the East, high rent burdens are found only around Berlin. Six districts there had a rent burden above 30%. The calculation uses wages at the place of work, meaning the wages of people who work in the district. Dahme-Spreewald, south-east of Berlin, had the highest at 36.6%. Commuting explains part of this. Many people from the surrounding area work in Berlin and earn more there. With wages at the place of residence instead, the rent burden falls in all six districts. It stays above 30% only in Dahme-Spreewald, Potsdam and Oberhavel. Munich The rent burden was highest in and around Munich. In Fürstenfeldbruck, a district just west of the city, it was 40.3%, the highest in Germany. In the city of Munich, it was 39.1%. Commuting plays a part here too: many people from Fürstenfeldbruck work in Munich and earn more there. With wages at the place of residence, the rent burden in Fürstenfeldbruck falls to 34.1%. In the city itself, it rises to 41.1%, because people who work in Munich earn more than people who live there. Leipzig and Chemnitz Leipzig and Chemnitz, two cities in Saxony, show how differently the rent burden has moved in the East. In Leipzig, advertised rents rose by 89% between 2014 and 2025, net wages by 58%. As a result, the rent burden rose from 19.6% to 23.5%, more than anywhere else in Saxony, Saxony-Anhalt and Thuringia, the three states often grouped as central Germany. Chemnitz went the other way: net wages rose by 46%, advertised rents by only 23%. The rent burden fell from 17.4% to 14.8%, the lowest in Germany. Explore Tapping or clicking a district on the map shows its current rent burden and, for comparison, its 2014 value. The lookup and the table below show the rent burden of any district in 2014, 2024 and 2025. **Show the data behind the graphics** | Year | West | East | Berlin | | --- | --- | --- | --- | | 2014 | 20.3% | 21.6% | 25.8% | | 2015 | 20.6% | 21.2% | 26.2% | | 2016 | 21.1% | 21.2% | 27.4% | | 2017 | 21.4% | 21.0% | 28.3% | | 2018 | 21.7% | 21.1% | 28.9% | | 2019 | 22.1% | 21.2% | 28.3% | | 2020 | 22.9% | 21.8% | 27.1% | | 2021 | 23.4% | 22.0% | 28.1% | | 2022 | 23.9% | 22.1% | 29.4% | | 2023 | 24.1% | 22.1% | 32.0% | | 2024 | 24.0% | 21.9% | 34.0% | | 2025 | 24.0% | 21.6% | 32.2% | | Region | Advertised rent | Net wage | | --- | --- | --- | | West | +61% | +36% | | East | +47% | +48% | Source: Federal Employment Agency (Bundesagentur für Arbeit), empirica regio / VALUE Marktdaten. East: Brandenburg, Mecklenburg-Western Pomerania, Saxony, Saxony-Anhalt, Thuringia (excluding Berlin). Average of the districts, with each district counting equally. The map values for every district are in the table further down. ## Look up the rent burden in any district ## In central Germany (Saxony, Saxony-Anhalt and Thuringia), the rent burden has fallen in 41 of 49 districts since 2014 20.9% Average of the three states in 2014 19.5% Average of the three states in 2025 In 2025, the highest rent burden in the three states was in Weimar, at 25.1%. Next came Erfurt (24.6%), Jena (24.5%) and Leipzig (23.5%). After Chemnitz, the lowest values were in Vogtlandkreis (16.3%) and Landkreis Zwickau (16.4%). ## Nationwide, the rent burden barely changed in 2025 23.6% Average of all districts and independent cities in 2025, after 23.7% the year before 26 Districts and independent cities above 30%, as many as in 2024 (2014: six) ## Search all 400 districts and independent cities Rent burden in 2014, 2024 and 2025, sorted by the 2025 value. The search field filters by district or state. Clicking a column header changes the sort order. 400 of 400 districts | Rank | District / city | 2014 | 2024 | 2025 | Change 2024–2025since 2024 | | --- | --- | --- | --- | --- | --- | | 1 | FürstenfeldbruckBavaria | 32.1% | 39.7% | 40.3% | +0.6 | | 2 | München, LandeshauptstadtBavaria | 32.5% | 39.1% | 39.1% | ±0.0 | | 3 | DachauBavaria | 32.1% | 38.5% | 38.9% | +0.4 | | 4 | EbersbergBavaria | 31.5% | 37.8% | 38.3% | +0.5 | | 5 | MiesbachBavaria | 31.3% | 37.4% | 37.9% | +0.5 | | 6 | Landkreis MünchenBavaria | 27.1% | 36.1% | 36.8% | +0.7 | | 7 | Dahme-SpreewaldBrandenburg | 24.7% | 38.1% | 36.6% | −1.5 | | 8 | StarnbergBavaria | 30.2% | 34.1% | 35.3% | +1.2 | | 9 | HavellandBrandenburg | 27.3% | 34.1% | 35.0% | +0.9 | | 10 | Bad Tölz-WolfratshausenBavaria | 29.5% | 34.9% | 34.9% | ±0.0 | | 11 | Garmisch-PartenkirchenBavaria | 29.8% | 35.7% | 34.7% | −1.0 | | 11 | OberhavelBrandenburg | 25.1% | 33.9% | 34.7% | +0.8 | | 13 | Potsdam-MittelmarkBrandenburg | 27.7% | 33.5% | 34.5% | +1.0 | | 14 | ErdingBavaria | 29.4% | 34.1% | 33.4% | −0.7 | | 15 | Potsdam, StadtBrandenburg | 28.2% | 32.8% | 32.6% | −0.2 | | 16 | Berlin, StadtBerlin | 25.8% | 34.0% | 32.2% | −1.8 | | 17 | BarnimBrandenburg | 23.3% | 32.2% | 32.1% | −0.1 | | 18 | FreisingBavaria | 26.7% | 31.1% | 31.9% | +0.8 | | 19 | Frankfurt am Main, StadtHesse | 26.5% | 31.0% | 31.6% | +0.6 | | 20 | Landkreis AugsburgBavaria | 23.4% | 31.3% | 31.4% | +0.1 | | 20 | Landkreis RosenheimBavaria | 26.9% | 31.8% | 31.4% | −0.4 | | 22 | Aichach-FriedbergBavaria | 24.2% | 31.1% | 31.3% | +0.2 | | 22 | OstholsteinSchleswig-Holstein | 24.0% | 32.0% | 31.3% | −0.7 | | 24 | HarburgLower Saxony | 28.3% | 31.0% | 31.2% | +0.2 | | 24 | Rosenheim, StadtBavaria | 25.7% | 30.6% | 31.2% | +0.6 | | 26 | Freiburg im Breisgau, StadtBaden-Württemberg | 29.3% | 30.8% | 30.6% | −0.2 | | 27 | Breisgau-HochschwarzwaldBaden-Württemberg | 25.8% | 29.4% | 29.8% | +0.4 | | 27 | EmmendingenBaden-Württemberg | 23.5% | 28.8% | 29.8% | +1.0 | | 29 | StormarnSchleswig-Holstein | 26.4% | 29.8% | 29.6% | −0.2 | | 30 | Berchtesgadener LandBavaria | 24.1% | 29.1% | 29.4% | +0.3 | | 31 | Landkreis FürthBavaria | 24.4% | 29.3% | 29.1% | −0.2 | | 32 | Hamburg, Freie und HansestadtHamburg | 27.4% | 28.8% | 29.0% | +0.2 | | 32 | PinnebergSchleswig-Holstein | 25.9% | 29.1% | 29.0% | −0.1 | | 34 | Landsberg am LechBavaria | 24.8% | 28.8% | 28.9% | +0.1 | | 34 | Teltow-FlämingBrandenburg | 22.3% | 28.4% | 28.9% | +0.5 | | 36 | Mainz, kreisfreie StadtRhineland-Palatinate | 25.7% | 28.9% | 28.8% | −0.1 | | 37 | Offenbach am Main, StadtHesse | 22.8% | 28.3% | 28.7% | +0.4 | | 38 | Fürth, StadtBavaria | 24.4% | 26.6% | 28.6% | +2.0 | | 38 | Landshut, StadtBavaria | 26.0% | 29.1% | 28.6% | −0.5 | | 38 | Märkisch-OderlandBrandenburg | 24.6% | 29.6% | 28.6% | −1.0 | | 41 | Darmstadt-DieburgHesse | 23.9% | 28.0% | 28.5% | +0.5 | | 41 | OberallgäuBavaria | 23.1% | 28.1% | 28.5% | +0.4 | | 43 | NordfrieslandSchleswig-Holstein | 22.2% | 27.7% | 28.4% | +0.7 | | 43 | Stuttgart, LandeshauptstadtBaden-Württemberg | 23.5% | 28.5% | 28.4% | −0.1 | | 45 | Augsburg, StadtBavaria | 22.4% | 27.8% | 28.3% | +0.5 | | 45 | Landkreis RostockMecklenburg-Western Pomerania | 25.8% | 28.3% | 28.3% | ±0.0 | | 47 | Heidelberg, StadtBaden-Württemberg | 26.0% | 27.4% | 28.1% | +0.7 | | 48 | Düsseldorf, StadtNorth Rhine-Westphalia | 23.0% | 25.6% | 28.0% | +2.4 | | 48 | Rhein-Pfalz-KreisRhineland-Palatinate | 23.8% | 27.8% | 28.0% | +0.2 | | 48 | SegebergSchleswig-Holstein | 25.0% | 28.1% | 28.0% | −0.1 | | 51 | Neu-UlmBavaria | 21.8% | 27.6% | 27.9% | +0.3 | | 51 | Rems-Murr-KreisBaden-Württemberg | 22.7% | 27.8% | 27.9% | +0.1 | | 51 | Weilheim-SchongauBavaria | 22.6% | 27.9% | 27.9% | ±0.0 | | 54 | Groß-GerauHesse | 21.6% | 27.8% | 27.8% | ±0.0 | | 54 | Heilbronn, UniversitätsstadtBaden-Württemberg | 22.9% | 27.4% | 27.8% | +0.4 | | 54 | KonstanzBaden-Württemberg | 26.0% | 28.3% | 27.8% | −0.5 | | 54 | Landkreis OldenburgLower Saxony | 22.7% | 27.3% | 27.8% | +0.5 | | 54 | LörrachBaden-Württemberg | 24.3% | 28.1% | 27.8% | −0.3 | | 59 | Köln, StadtNorth Rhine-Westphalia | 24.7% | 28.2% | 27.7% | −0.5 | | 59 | LudwigsburgBaden-Württemberg | 23.0% | 27.6% | 27.7% | +0.1 | | 61 | Memmingen, StadtBavaria | 23.0% | 27.5% | 27.6% | +0.1 | | 62 | Landkreis OffenbachHesse | 23.4% | 27.0% | 27.5% | +0.5 | | 62 | TraunsteinBavaria | 21.3% | 27.8% | 27.5% | −0.3 | | 64 | BergstraßeHesse | 23.1% | 26.9% | 27.4% | +0.5 | | 64 | Münster, StadtNorth Rhine-Westphalia | 25.2% | 27.2% | 27.4% | +0.2 | | 66 | Kempten (Allgäu), StadtBavaria | 22.9% | 27.3% | 27.3% | ±0.0 | | 66 | Lindau (Bodensee)Bavaria | 23.4% | 27.8% | 27.3% | −0.5 | | 66 | Main-Kinzig-KreisHesse | 21.6% | 27.2% | 27.3% | +0.1 | | 66 | Pfaffenhofen a.d.IlmBavaria | 23.3% | 27.6% | 27.3% | −0.3 | | 70 | Lübeck, HansestadtSchleswig-Holstein | 22.1% | 27.1% | 27.1% | ±0.0 | | 70 | LüneburgLower Saxony | 25.3% | 27.4% | 27.1% | −0.3 | | 72 | WetteraukreisHesse | 23.2% | 27.1% | 27.0% | −0.1 | | 72 | Würzburg, StadtBavaria | 24.9% | 27.2% | 27.0% | −0.2 | | 74 | Schleswig-FlensburgSchleswig-Holstein | 21.5% | 27.4% | 26.9% | −0.5 | | 75 | Herzogtum LauenburgSchleswig-Holstein | 22.0% | 27.3% | 26.8% | −0.5 | | 75 | RavensburgBaden-Württemberg | 22.7% | 26.6% | 26.8% | +0.2 | | 75 | Worms, kreisfreie StadtRhineland-Palatinate | 20.4% | 26.5% | 26.8% | +0.3 | | 78 | Regensburg, StadtBavaria | 24.9% | 26.5% | 26.7% | +0.2 | | 79 | Alzey-WormsRhineland-Palatinate | 20.7% | 27.9% | 26.6% | −1.3 | | 79 | Mühldorf a.InnBavaria | 19.9% | 26.5% | 26.6% | +0.1 | | 79 | PlönSchleswig-Holstein | 23.4% | 27.4% | 26.6% | −0.8 | | 82 | Darmstadt, WissenschaftsstadtHesse | 22.5% | 24.9% | 26.5% | +1.6 | | 82 | OstallgäuBavaria | 20.9% | 26.5% | 26.5% | ±0.0 | | 82 | TübingenBaden-Württemberg | 24.6% | 26.2% | 26.5% | +0.3 | | 85 | EichstättBavaria | 24.8% | 26.4% | 26.4% | ±0.0 | | 85 | GünzburgBavaria | 20.3% | 26.4% | 26.4% | ±0.0 | | 85 | HochtaunuskreisHesse | 23.3% | 24.2% | 26.4% | +2.2 | | 88 | Baden-Baden, StadtBaden-Württemberg | 24.2% | 26.5% | 26.3% | −0.2 | | 88 | BöblingenBaden-Württemberg | 19.3% | 25.7% | 26.3% | +0.6 | | 88 | KelheimBavaria | 20.8% | 26.7% | 26.3% | −0.4 | | 88 | Landkreis KarlsruheBaden-Württemberg | 21.3% | 26.5% | 26.3% | −0.2 | | 88 | Landkreis WürzburgBavaria | 22.6% | 26.4% | 26.3% | −0.1 | | 88 | OrtenaukreisBaden-Württemberg | 20.9% | 26.5% | 26.3% | −0.2 | | 88 | OsterholzLower Saxony | 22.0% | 26.5% | 26.3% | −0.2 | | 95 | Aschaffenburg, StadtBavaria | 22.0% | 26.8% | 26.2% | −0.6 | | 95 | Bamberg, StadtBavaria | 22.3% | 27.1% | 26.2% | −0.9 | | 95 | Landau in der Pfalz, kr.f. St.Rhineland-Palatinate | 24.1% | 25.8% | 26.2% | +0.4 | | 95 | Oder-SpreeBrandenburg | 23.6% | 27.1% | 26.2% | −0.9 | | 95 | Rhein-Erft-KreisNorth Rhine-Westphalia | 22.1% | 26.2% | 26.2% | ±0.0 | | 95 | VerdenLower Saxony | 21.0% | 26.8% | 26.2% | −0.6 | | 101 | EsslingenBaden-Württemberg | 22.8% | 25.8% | 26.1% | +0.3 | | 101 | Grafschaft BentheimLower Saxony | 21.0% | 25.3% | 26.1% | +0.8 | | 101 | Landkreis BambergBavaria | 21.1% | 25.0% | 26.1% | +1.1 | | 101 | RothBavaria | 21.7% | 26.0% | 26.1% | +0.1 | | 105 | Landkreis LandshutBavaria | 21.4% | 25.8% | 26.0% | +0.2 | | 105 | Main-Taunus-KreisHesse | 22.3% | 25.5% | 26.0% | +0.5 | | 105 | Schwabach, StadtBavaria | 23.1% | 25.6% | 26.0% | +0.4 | | 105 | Vorpommern-RügenMecklenburg-Western Pomerania | 26.6% | 26.2% | 26.0% | −0.2 | | 109 | Alb-Donau-KreisBaden-Württemberg | 20.7% | 25.8% | 25.9% | +0.1 | | 109 | Bad DürkheimRhineland-Palatinate | 22.0% | 25.8% | 25.9% | +0.1 | | 109 | Nürnberg, StadtBavaria | 22.8% | 25.8% | 25.9% | +0.1 | | 112 | BodenseekreisBaden-Württemberg | 22.4% | 24.6% | 25.8% | +1.2 | | 112 | Rostock, Hanse- und Uni-StadtMecklenburg-Western Pomerania | 23.7% | 26.0% | 25.8% | −0.2 | | 114 | CloppenburgLower Saxony | 21.5% | 25.3% | 25.7% | +0.4 | | 114 | Rhein-Sieg-KreisNorth Rhine-Westphalia | 22.6% | 25.7% | 25.7% | ±0.0 | | 116 | AmmerlandLower Saxony | 22.7% | 25.5% | 25.6% | +0.1 | | 116 | Rheinisch-Bergischer KreisNorth Rhine-Westphalia | 22.5% | 26.0% | 25.6% | −0.4 | | 118 | Delmenhorst, StadtLower Saxony | 19.8% | 25.2% | 25.5% | +0.3 | | 118 | Landkreis RegensburgBavaria | 22.2% | 25.9% | 25.5% | −0.4 | | 118 | Neuburg-SchrobenhausenBavaria | 22.8% | 26.5% | 25.5% | −1.0 | | 118 | Neustadt a.d.Aisch-Bad Windsh.Bavaria | 20.0% | 26.1% | 25.5% | −0.6 | | 118 | ReutlingenBaden-Württemberg | 22.3% | 25.5% | 25.5% | ±0.0 | | 123 | Kaufbeuren, StadtBavaria | 20.4% | 26.3% | 25.4% | −0.9 | | 123 | Speyer, kreisfreie StadtRhineland-Palatinate | 22.9% | 26.5% | 25.4% | −1.1 | | 123 | VechtaLower Saxony | 21.6% | 25.4% | 25.4% | ±0.0 | | 126 | EnzkreisBaden-Württemberg | 20.3% | 25.2% | 25.3% | +0.1 | | 126 | Nürnberger LandBavaria | 21.3% | 25.6% | 25.3% | −0.3 | | 126 | Oldenburg (Oldenburg), StadtLower Saxony | 23.3% | 25.5% | 25.3% | −0.2 | | 126 | UnterallgäuBavaria | 19.1% | 25.3% | 25.3% | ±0.0 | | 130 | Landkreis KaiserslauternRhineland-Palatinate | 19.2% | 23.9% | 25.2% | +1.3 | | 131 | StadeLower Saxony | 22.2% | 25.0% | 25.1% | +0.1 | | 131 | Weimar, StadtThuringia | 23.5% | 25.4% | 25.1% | −0.3 | | 133 | Landkreis AschaffenburgBavaria | 21.1% | 25.6% | 25.0% | −0.6 | | 133 | Neustadt an der Weinstraße,St.Rhineland-Palatinate | 23.1% | 25.4% | 25.0% | −0.4 | | 133 | Ulm, UniversitätsstadtBaden-Württemberg | 23.7% | 24.4% | 25.0% | +0.6 | | 136 | CoesfeldNorth Rhine-Westphalia | 21.0% | 24.0% | 24.9% | +0.9 | | 136 | Dillingen a.d.DonauBavaria | 18.0% | 24.4% | 24.9% | +0.5 | | 136 | Ostprignitz-RuppinBrandenburg | 19.9% | 25.5% | 24.9% | −0.6 | | 136 | WaldshutBaden-Württemberg | 22.8% | 25.2% | 24.9% | −0.3 | | 140 | Bonn, StadtNorth Rhine-Westphalia | 21.6% | 22.8% | 24.8% | +2.0 | | 140 | LeerLower Saxony | 19.9% | 24.7% | 24.8% | +0.1 | | 140 | Rheingau-Taunus-KreisHesse | 22.9% | 25.5% | 24.8% | −0.7 | | 140 | Straubing, StadtBavaria | 20.4% | 25.0% | 24.8% | −0.2 | | 140 | Trier, kreisfreie StadtRhineland-Palatinate | 24.4% | 25.4% | 24.8% | −0.6 | | 145 | Landkreis HeilbronnBaden-Württemberg | 19.0% | 24.5% | 24.7% | +0.2 | | 145 | Straubing-BogenBavaria | 19.0% | 24.5% | 24.7% | +0.2 | | 145 | Trier-SaarburgRhineland-Palatinate | 23.3% | 25.3% | 24.7% | −0.6 | | 145 | Wiesbaden, LandeshauptstadtHesse | 23.9% | 24.4% | 24.7% | +0.3 | | 149 | DiepholzLower Saxony | 21.3% | 24.7% | 24.6% | −0.1 | | 149 | Erfurt, StadtThuringia | 24.6% | 24.2% | 24.6% | +0.4 | | 149 | Kiel, LandeshauptstadtSchleswig-Holstein | 21.6% | 24.8% | 24.6% | −0.2 | | 152 | Jena, StadtThuringia | 27.2% | 25.3% | 24.5% | −0.8 | | 152 | Rendsburg-EckernfördeSchleswig-Holstein | 20.5% | 24.7% | 24.5% | −0.2 | | 154 | DithmarschenSchleswig-Holstein | 18.5% | 24.6% | 24.4% | −0.2 | | 154 | Landkreis AnsbachBavaria | 19.5% | 24.8% | 24.4% | −0.4 | | 154 | Landkreis SchweinfurtBavaria | 20.1% | 23.9% | 24.4% | +0.5 | | 154 | MiltenbergBavaria | 19.7% | 24.3% | 24.4% | +0.1 | | 154 | Rotenburg (Wümme)Lower Saxony | 19.7% | 24.2% | 24.4% | +0.2 | | 159 | EuskirchenNorth Rhine-Westphalia | 18.9% | 24.0% | 24.3% | +0.3 | | 159 | Frankenthal (Pfalz), kr.f. St.Rhineland-Palatinate | 17.7% | 23.7% | 24.3% | +0.6 | | 159 | GöppingenBaden-Württemberg | 20.4% | 24.6% | 24.3% | −0.3 | | 162 | BorkenNorth Rhine-Westphalia | 19.4% | 23.4% | 24.2% | +0.8 | | 162 | GießenHesse | 21.1% | 24.4% | 24.2% | −0.2 | | 162 | Karlsruhe, StadtBaden-Württemberg | 23.4% | 24.3% | 24.2% | −0.1 | | 165 | Merzig-WadernSaarland | 21.0% | 24.0% | 24.1% | +0.1 | | 165 | Rhein-Neckar-KreisBaden-Württemberg | 20.5% | 24.2% | 24.1% | −0.1 | | 165 | Südliche WeinstraßeRhineland-Palatinate | 21.4% | 24.3% | 24.1% | −0.2 | | 168 | Bayreuth, StadtBavaria | 22.6% | 23.9% | 24.0% | +0.1 | | 168 | Landkreis PassauBavaria | 20.0% | 24.3% | 24.0% | −0.3 | | 168 | Pforzheim, StadtBaden-Württemberg | 21.1% | 24.6% | 24.0% | −0.6 | | 168 | Vorpommern-GreifswaldMecklenburg-Western Pomerania | 26.4% | 24.1% | 24.0% | −0.1 | | 172 | KleveNorth Rhine-Westphalia | 21.4% | 23.7% | 23.9% | +0.2 | | 172 | Osnabrück, StadtLower Saxony | 21.1% | 24.1% | 23.9% | −0.2 | | 172 | SteinfurtNorth Rhine-Westphalia | 19.2% | 23.9% | 23.9% | ±0.0 | | 175 | AhrweilerRhineland-Palatinate | 21.2% | 24.1% | 23.8% | −0.3 | | 175 | Limburg-WeilburgHesse | 19.5% | 24.3% | 23.8% | −0.5 | | 175 | Neumarkt i.d.OPf.Bavaria | 21.7% | 24.0% | 23.8% | −0.2 | | 175 | Rhein-Kreis NeussNorth Rhine-Westphalia | 20.8% | 23.7% | 23.8% | +0.1 | | 175 | WittmundLower Saxony | 18.6% | 23.1% | 23.8% | +0.7 | | 180 | FuldaHesse | 19.5% | 23.3% | 23.7% | +0.4 | | 181 | CalwBaden-Württemberg | 19.4% | 24.2% | 23.6% | −0.6 | | 181 | PeineLower Saxony | 18.6% | 23.6% | 23.6% | ±0.0 | | 181 | Weißenburg-GunzenhausenBavaria | 17.8% | 23.6% | 23.6% | ±0.0 | | 184 | CuxhavenLower Saxony | 19.4% | 23.9% | 23.5% | −0.4 | | 184 | Landkreis OsnabrückLower Saxony | 19.4% | 23.4% | 23.5% | +0.1 | | 184 | Leipzig, StadtSaxony | 19.6% | 22.9% | 23.5% | +0.6 | | 184 | NordwestmecklenburgMecklenburg-Western Pomerania | 22.1% | 23.9% | 23.5% | −0.4 | | 184 | SchwandorfBavaria | 18.6% | 23.8% | 23.5% | −0.3 | | 189 | ForchheimBavaria | 20.9% | 24.7% | 23.4% | −1.3 | | 189 | ViersenNorth Rhine-Westphalia | 20.9% | 23.3% | 23.4% | +0.1 | | 189 | Weiden i.d.OPf., StadtBavaria | 20.6% | 23.3% | 23.4% | +0.1 | | 192 | DeggendorfBavaria | 19.4% | 23.4% | 23.3% | −0.1 | | 192 | NeuwiedRhineland-Palatinate | 17.5% | 23.0% | 23.3% | +0.3 | | 192 | PaderbornNorth Rhine-Westphalia | 19.5% | 23.4% | 23.3% | −0.1 | | 195 | KitzingenBavaria | 19.0% | 23.4% | 23.2% | −0.2 | | 195 | LichtenfelsBavaria | 19.4% | 23.9% | 23.2% | −0.7 | | 197 | AurichLower Saxony | 21.8% | 23.6% | 23.1% | −0.5 | | 197 | Flensburg, StadtSchleswig-Holstein | 19.5% | 23.5% | 23.1% | −0.4 | | 197 | GüterslohNorth Rhine-Westphalia | 18.3% | 22.8% | 23.1% | +0.3 | | 197 | HeinsbergNorth Rhine-Westphalia | 20.3% | 23.6% | 23.1% | −0.5 | | 197 | Mayen-KoblenzRhineland-Palatinate | 18.8% | 23.3% | 23.1% | −0.2 | | 197 | Schwäbisch HallBaden-Württemberg | 19.2% | 23.2% | 23.1% | −0.1 | | 203 | EmslandLower Saxony | 19.0% | 22.9% | 23.0% | +0.1 | | 203 | Mönchengladbach, StadtNorth Rhine-Westphalia | 19.0% | 22.7% | 23.0% | +0.3 | | 203 | Neckar-Odenwald-KreisBaden-Württemberg | 17.1% | 23.2% | 23.0% | −0.2 | | 203 | RastattBaden-Württemberg | 18.5% | 22.3% | 23.0% | +0.7 | | 203 | Region HannoverLower Saxony | 19.9% | 23.2% | 23.0% | −0.2 | | 203 | Rottal-InnBavaria | 19.0% | 23.4% | 23.0% | −0.4 | | 209 | EichsfeldThuringia | 22.0% | 23.0% | 22.9% | −0.1 | | 209 | HohenlohekreisBaden-Württemberg | 18.3% | 22.9% | 22.9% | ±0.0 | | 209 | Neumünster, StadtSchleswig-Holstein | 19.3% | 23.6% | 22.9% | −0.7 | | 209 | Solingen, KlingenstadtNorth Rhine-Westphalia | 19.6% | 23.1% | 22.9% | −0.2 | | 209 | ZollernalbkreisBaden-Württemberg | 18.0% | 23.1% | 22.9% | −0.2 | | 214 | Bremen, StadtBremen | 20.2% | 23.0% | 22.8% | −0.2 | | 214 | Donau-RiesBavaria | 19.0% | 23.2% | 22.8% | −0.4 | | 214 | FrieslandLower Saxony | 19.3% | 23.5% | 22.8% | −0.7 | | 214 | Ingolstadt, StadtBavaria | 21.1% | 22.2% | 22.8% | +0.6 | | 218 | Eifelkreis Bitburg-PrümRhineland-Palatinate | 21.0% | 22.7% | 22.7% | ±0.0 | | 218 | GifhornLower Saxony | 22.1% | 23.2% | 22.7% | −0.5 | | 218 | HeidenheimBaden-Württemberg | 17.3% | 22.7% | 22.7% | ±0.0 | | 218 | Saale-Holzland-KreisThuringia | 23.4% | 22.8% | 22.7% | −0.1 | | 218 | Schwarzwald-Baar-KreisBaden-Württemberg | 18.7% | 22.5% | 22.7% | +0.2 | | 218 | Schwerin, LandeshauptstadtMecklenburg-Western Pomerania | 22.1% | 23.3% | 22.7% | −0.6 | | 218 | SigmaringenBaden-Württemberg | 17.2% | 22.5% | 22.7% | +0.2 | | 218 | TuttlingenBaden-Württemberg | 18.0% | 23.2% | 22.7% | −0.5 | | 226 | Amberg, StadtBavaria | 18.0% | 22.8% | 22.6% | −0.2 | | 226 | Bad KreuznachRhineland-Palatinate | 19.0% | 22.3% | 22.6% | +0.3 | | 226 | FreudenstadtBaden-Württemberg | 17.4% | 22.5% | 22.6% | +0.1 | | 226 | Kaiserslautern, kreisfr. StadtRhineland-Palatinate | 17.3% | 22.5% | 22.6% | +0.1 | | 226 | KronachBavaria | 19.4% | 22.1% | 22.6% | +0.5 | | 226 | Mainz-BingenRhineland-Palatinate | 21.9% | 22.7% | 22.6% | −0.1 | | 226 | Passau, StadtBavaria | 20.4% | 22.8% | 22.6% | −0.2 | | 226 | Rhein-Lahn-KreisRhineland-Palatinate | 18.1% | 22.3% | 22.6% | +0.3 | | 226 | WarendorfNorth Rhine-Westphalia | 17.6% | 22.3% | 22.6% | +0.3 | | 226 | Weimarer LandThuringia | 23.4% | 23.2% | 22.6% | −0.6 | | 236 | Bernkastel-WittlichRhineland-Palatinate | 19.0% | 23.2% | 22.5% | −0.7 | | 236 | HeidekreisLower Saxony | 17.8% | 22.9% | 22.5% | −0.4 | | 236 | OdenwaldkreisHesse | 20.4% | 23.6% | 22.5% | −1.1 | | 239 | Mannheim, UniversitätsstadtBaden-Württemberg | 20.3% | 22.8% | 22.4% | −0.4 | | 240 | Dresden, StadtSaxony | 22.6% | 22.1% | 22.3% | +0.2 | | 240 | Koblenz, kreisfreie StadtRhineland-Palatinate | 19.0% | 22.2% | 22.3% | +0.1 | | 240 | MettmannNorth Rhine-Westphalia | 19.8% | 22.3% | 22.3% | ±0.0 | | 243 | BiberachBaden-Württemberg | 19.1% | 22.5% | 22.2% | −0.3 | | 243 | Landkreis BayreuthBavaria | 19.0% | 21.7% | 22.2% | +0.5 | | 243 | OstalbkreisBaden-Württemberg | 18.2% | 21.9% | 22.2% | +0.3 | | 246 | Landkreis CoburgBavaria | 18.8% | 22.0% | 22.1% | +0.1 | | 247 | Marburg-BiedenkopfHesse | 19.3% | 22.3% | 22.0% | −0.3 | | 247 | SömmerdaThuringia | 21.8% | 21.7% | 22.0% | +0.3 | | 249 | Lahn-Dill-KreisHesse | 17.9% | 21.7% | 21.9% | +0.2 | | 249 | Ludwigslust-ParchimMecklenburg-Western Pomerania | 22.3% | 22.4% | 21.9% | −0.5 | | 251 | GermersheimRhineland-Palatinate | 17.0% | 22.4% | 21.8% | −0.6 | | 251 | NordsachsenSaxony | 20.5% | 21.6% | 21.8% | +0.2 | | 251 | SchaumburgLower Saxony | 17.0% | 21.8% | 21.8% | ±0.0 | | 251 | Städteregion AachenNorth Rhine-Westphalia | 20.1% | 22.0% | 21.8% | −0.2 | | 255 | Brandenburg an der Havel, St.Brandenburg | 17.0% | 20.5% | 21.7% | +1.2 | | 255 | ChamBavaria | 18.7% | 21.7% | 21.7% | ±0.0 | | 255 | Frankfurt (Oder), StadtBrandenburg | 20.0% | 21.6% | 21.7% | +0.1 | | 255 | Leverkusen, StadtNorth Rhine-Westphalia | 16.7% | 21.7% | 21.7% | ±0.0 | | 255 | Main-Tauber-KreisBaden-Württemberg | 17.6% | 21.9% | 21.7% | −0.2 | | 255 | UelzenLower Saxony | 19.2% | 21.7% | 21.7% | ±0.0 | | 261 | HildburghausenThuringia | 21.7% | 22.1% | 21.6% | −0.5 | | 261 | RottweilBaden-Württemberg | 17.6% | 21.5% | 21.6% | +0.1 | | 261 | SaarlouisSaarland | 18.5% | 21.4% | 21.6% | +0.2 | | 261 | SüdwestpfalzRhineland-Palatinate | 17.2% | 20.9% | 21.6% | +0.7 | | 265 | AltöttingBavaria | 16.3% | 21.3% | 21.5% | +0.2 | | 265 | Erlangen-HöchstadtBavaria | 18.5% | 21.0% | 21.5% | +0.5 | | 265 | Landkreis LeipzigSaxony | 21.5% | 21.5% | 21.5% | ±0.0 | | 265 | Nienburg (Weser)Lower Saxony | 17.9% | 21.7% | 21.5% | −0.2 | | 265 | WesterwaldkreisRhineland-Palatinate | 18.6% | 21.7% | 21.5% | −0.2 | | 270 | Ansbach, StadtBavaria | 19.1% | 21.6% | 21.4% | −0.2 | | 270 | Minden-LübbeckeNorth Rhine-Westphalia | 17.1% | 21.8% | 21.4% | −0.4 | | 270 | Sächs. Schweiz-OsterzgebirgeSaxony | 22.7% | 21.5% | 21.4% | −0.1 | | 273 | CelleLower Saxony | 17.5% | 21.0% | 21.3% | +0.3 | | 274 | Cottbus, StadtBrandenburg | 18.5% | 20.8% | 21.1% | +0.3 | | 274 | DonnersbergkreisRhineland-Palatinate | 16.1% | 20.6% | 21.1% | +0.5 | | 274 | GöttingenLower Saxony | 19.0% | 21.7% | 21.1% | −0.6 | | 274 | Saarpfalz-KreisSaarland | 17.1% | 21.0% | 21.1% | +0.1 | | 274 | WeselNorth Rhine-Westphalia | 19.1% | 21.3% | 21.1% | −0.2 | | 279 | DürenNorth Rhine-Westphalia | 17.3% | 21.2% | 21.0% | −0.2 | | 279 | HelmstedtLower Saxony | 18.5% | 22.2% | 21.0% | −1.2 | | 279 | Hersfeld-RotenburgHesse | 16.7% | 21.8% | 21.0% | −0.8 | | 279 | SteinburgSchleswig-Holstein | 18.3% | 21.2% | 21.0% | −0.2 | | 283 | Bielefeld, StadtNorth Rhine-Westphalia | 18.6% | 21.4% | 20.9% | −0.5 | | 283 | KulmbachBavaria | 16.9% | 21.1% | 20.9% | −0.2 | | 283 | Rhein-Hunsrück-KreisRhineland-Palatinate | 16.6% | 21.4% | 20.9% | −0.5 | | 283 | WolfenbüttelLower Saxony | 19.5% | 21.7% | 20.9% | −0.8 | | 287 | Amberg-SulzbachBavaria | 16.7% | 20.8% | 20.8% | ±0.0 | | 287 | Bottrop, StadtNorth Rhine-Westphalia | 18.0% | 20.8% | 20.8% | ±0.0 | | 287 | Cochem-ZellRhineland-Palatinate | 16.7% | 21.5% | 20.8% | −0.7 | | 287 | Ilm-KreisThuringia | 21.8% | 21.3% | 20.8% | −0.5 | | 287 | Ludwigshafen am Rhein, StadtRhineland-Palatinate | 15.3% | 21.3% | 20.8% | −0.5 | | 292 | Rhön-GrabfeldBavaria | 16.9% | 21.0% | 20.7% | −0.3 | | 293 | HerfordNorth Rhine-Westphalia | 16.8% | 20.5% | 20.6% | +0.1 | | 293 | Oberbergischer KreisNorth Rhine-Westphalia | 16.8% | 20.6% | 20.6% | ±0.0 | | 293 | SoestNorth Rhine-Westphalia | 17.9% | 20.4% | 20.6% | +0.2 | | 296 | Erlangen, StadtBavaria | 19.3% | 20.8% | 20.5% | −0.3 | | 296 | HildesheimLower Saxony | 17.2% | 20.9% | 20.5% | −0.4 | | 296 | Neustadt a.d.WaldnaabBavaria | 17.4% | 20.0% | 20.5% | +0.5 | | 296 | OlpeNorth Rhine-Westphalia | 18.0% | 21.0% | 20.5% | −0.5 | | 296 | PrignitzBrandenburg | 20.5% | 21.0% | 20.5% | −0.5 | | 296 | TirschenreuthBavaria | 15.6% | 20.1% | 20.5% | +0.4 | | 302 | Bochum, StadtNorth Rhine-Westphalia | 17.8% | 20.6% | 20.4% | −0.2 | | 302 | Freyung-GrafenauBavaria | 16.1% | 20.9% | 20.4% | −0.5 | | 302 | Krefeld, StadtNorth Rhine-Westphalia | 17.2% | 20.5% | 20.4% | −0.1 | | 302 | Saale-Orla-KreisThuringia | 22.7% | 21.1% | 20.4% | −0.7 | | 302 | St. WendelSaarland | 17.5% | 20.1% | 20.4% | +0.3 | | 307 | HaßbergeBavaria | 16.5% | 20.9% | 20.3% | −0.6 | | 307 | Hof, StadtBavaria | 15.9% | 20.5% | 20.3% | −0.2 | | 307 | Landkreis KasselHesse | 16.4% | 20.2% | 20.3% | +0.1 | | 307 | RegenBavaria | 15.6% | 20.2% | 20.3% | +0.1 | | 311 | Braunschweig, StadtLower Saxony | 19.8% | 20.3% | 20.2% | −0.1 | | 311 | GothaThuringia | 20.7% | 21.1% | 20.2% | −0.9 | | 311 | Kassel, documenta-StadtHesse | 19.1% | 20.1% | 20.2% | +0.1 | | 314 | Altenkirchen (Westerwald)Rhineland-Palatinate | 16.9% | 20.2% | 20.1% | −0.1 | | 314 | Bad KissingenBavaria | 17.5% | 20.0% | 20.1% | +0.1 | | 314 | Dingolfing-LandauBavaria | 15.6% | 20.5% | 20.1% | −0.4 | | 314 | Main-SpessartBavaria | 15.9% | 20.0% | 20.1% | +0.1 | | 314 | NeunkirchenSaarland | 16.9% | 20.0% | 20.1% | +0.1 | | 314 | VogelsbergkreisHesse | 17.0% | 19.9% | 20.1% | +0.2 | | 320 | KuselRhineland-Palatinate | 17.9% | 19.0% | 20.0% | +1.0 | | 321 | Ennepe-Ruhr-KreisNorth Rhine-Westphalia | 17.2% | 19.9% | 19.9% | ±0.0 | | 321 | UnnaNorth Rhine-Westphalia | 17.8% | 19.8% | 19.9% | +0.1 | | 323 | LippeNorth Rhine-Westphalia | 16.8% | 19.7% | 19.8% | +0.1 | | 323 | Oberhausen, StadtNorth Rhine-Westphalia | 16.6% | 19.6% | 19.8% | +0.2 | | 323 | Regionalverband SaarbrückenSaarland | 18.0% | 19.7% | 19.8% | +0.1 | | 323 | Schmalkalden-MeiningenThuringia | 22.0% | 21.1% | 19.8% | −1.3 | | 323 | VulkaneifelRhineland-Palatinate | 16.9% | 20.3% | 19.8% | −0.5 | | 328 | Dortmund, StadtNorth Rhine-Westphalia | 17.2% | 20.2% | 19.6% | −0.6 | | 328 | Schwalm-Eder-KreisHesse | 16.7% | 19.9% | 19.6% | −0.3 | | 328 | Unstrut-Hainich-KreisThuringia | 22.5% | 19.9% | 19.6% | −0.3 | | 331 | Mecklenburgische SeenplatteMecklenburg-Western Pomerania | 21.1% | 19.9% | 19.5% | −0.4 | | 331 | SonnebergThuringia | 19.8% | 19.6% | 19.5% | −0.1 | | 331 | UckermarkBrandenburg | 20.4% | 19.8% | 19.5% | −0.3 | | 331 | Wuppertal, StadtNorth Rhine-Westphalia | 16.8% | 19.5% | 19.5% | ±0.0 | | 335 | Essen, StadtNorth Rhine-Westphalia | 17.8% | 19.5% | 19.4% | −0.1 | | 335 | WittenbergSaxony-Anhalt | 19.9% | 19.6% | 19.4% | −0.2 | | 337 | Hamm, StadtNorth Rhine-Westphalia | 17.0% | 19.8% | 19.3% | −0.5 | | 337 | Landkreis HofBavaria | 16.3% | 20.1% | 19.3% | −0.8 | | 339 | BirkenfeldRhineland-Palatinate | 16.3% | 18.8% | 19.2% | +0.4 | | 339 | Bremerhaven, StadtBremen | 15.2% | 19.1% | 19.2% | +0.1 | | 339 | MeißenSaxony | 20.9% | 19.7% | 19.2% | −0.5 | | 339 | NortheimLower Saxony | 16.6% | 18.8% | 19.2% | +0.4 | | 343 | Waldeck-FrankenbergHesse | 16.0% | 19.1% | 19.1% | ±0.0 | | 344 | BautzenSaxony | 22.2% | 19.4% | 19.0% | −0.4 | | 344 | Jerichower LandSaxony-Anhalt | 19.9% | 19.8% | 19.0% | −0.8 | | 346 | Emden, StadtLower Saxony | 15.9% | 18.8% | 18.9% | +0.1 | | 347 | Halle (Saale), StadtSaxony-Anhalt | 20.1% | 19.5% | 18.8% | −0.7 | | 347 | HarzSaxony-Anhalt | 19.2% | 18.9% | 18.8% | −0.1 | | 347 | Lüchow-DannenbergLower Saxony | 14.8% | 18.1% | 18.8% | +0.7 | | 347 | RecklinghausenNorth Rhine-Westphalia | 17.0% | 18.9% | 18.8% | −0.1 | | 347 | Suhl, StadtThuringia | 22.1% | 19.8% | 18.8% | −1.0 | | 352 | Hameln-PyrmontLower Saxony | 15.7% | 18.6% | 18.7% | +0.1 | | 352 | WartburgkreisThuringia | 21.0% | 19.5% | 18.7% | −0.8 | | 354 | Coburg, StadtBavaria | 17.8% | 19.2% | 18.6% | −0.6 | | 354 | KyffhäuserkreisThuringia | 19.2% | 19.1% | 18.6% | −0.5 | | 354 | Siegen-WittgensteinNorth Rhine-Westphalia | 16.9% | 19.4% | 18.6% | −0.8 | | 357 | BördeSaxony-Anhalt | 18.5% | 18.8% | 18.5% | −0.3 | | 357 | Schweinfurt, StadtBavaria | 15.1% | 18.1% | 18.5% | +0.4 | | 357 | Werra-Meißner-KreisHesse | 16.1% | 18.3% | 18.5% | +0.2 | | 357 | Wunsiedel i.FichtelgebirgeBavaria | 14.3% | 18.8% | 18.5% | −0.3 | | 361 | HochsauerlandkreisNorth Rhine-Westphalia | 15.2% | 18.4% | 18.4% | ±0.0 | | 361 | SaalekreisSaxony-Anhalt | 18.8% | 18.6% | 18.4% | −0.2 | | 363 | WesermarschLower Saxony | 14.4% | 18.2% | 18.3% | +0.1 | | 364 | Elbe-ElsterBrandenburg | 21.4% | 18.4% | 18.2% | −0.2 | | 364 | HöxterNorth Rhine-Westphalia | 15.3% | 18.4% | 18.2% | −0.2 | | 364 | Magdeburg, LandeshauptstadtSaxony-Anhalt | 20.3% | 18.6% | 18.2% | −0.4 | | 364 | NordhausenThuringia | 20.7% | 18.4% | 18.2% | −0.2 | | 364 | Saalfeld-RudolstadtThuringia | 21.5% | 19.2% | 18.2% | −1.0 | | 369 | Anhalt-BitterfeldSaxony-Anhalt | 21.8% | 18.6% | 18.1% | −0.5 | | 369 | Spree-NeißeBrandenburg | 18.4% | 18.4% | 18.1% | −0.3 | | 371 | GoslarLower Saxony | 17.1% | 18.3% | 18.0% | −0.3 | | 371 | Oberspreewald-LausitzBrandenburg | 19.5% | 18.9% | 18.0% | −0.9 | | 373 | BurgenlandkreisSaxony-Anhalt | 19.6% | 18.2% | 17.9% | −0.3 | | 373 | Herne, StadtNorth Rhine-Westphalia | 16.1% | 17.9% | 17.9% | ±0.0 | | 373 | StendalSaxony-Anhalt | 20.4% | 18.5% | 17.9% | −0.6 | | 373 | Zweibrücken, kreisfreie StadtRhineland-Palatinate | 15.2% | 17.9% | 17.9% | ±0.0 | | 377 | Dessau-Roßlau, StadtSaxony-Anhalt | 19.6% | 17.8% | 17.8% | ±0.0 | | 377 | MittelsachsenSaxony | 20.8% | 18.1% | 17.8% | −0.3 | | 379 | Duisburg, StadtNorth Rhine-Westphalia | 15.1% | 17.8% | 17.7% | −0.1 | | 379 | Gera, StadtThuringia | 19.2% | 18.4% | 17.7% | −0.7 | | 379 | Mülheim an der Ruhr, StadtNorth Rhine-Westphalia | 17.7% | 18.2% | 17.7% | −0.5 | | 382 | Mansfeld-SüdharzSaxony-Anhalt | 20.6% | 18.3% | 17.6% | −0.7 | | 383 | ErzgebirgskreisSaxony | 20.9% | 17.8% | 17.5% | −0.3 | | 383 | GörlitzSaxony | 20.0% | 17.9% | 17.5% | −0.4 | | 385 | Märkischer KreisNorth Rhine-Westphalia | 16.0% | 17.5% | 17.4% | −0.1 | | 385 | Remscheid, StadtNorth Rhine-Westphalia | 16.2% | 17.7% | 17.4% | −0.3 | | 387 | Altenburger LandThuringia | 21.6% | 17.8% | 17.2% | −0.6 | | 387 | Altmarkkreis SalzwedelSaxony-Anhalt | 20.4% | 17.8% | 17.2% | −0.6 | | 387 | Pirmasens, kreisfreie StadtRhineland-Palatinate | 14.4% | 16.8% | 17.2% | +0.4 | | 390 | Gelsenkirchen, StadtNorth Rhine-Westphalia | 15.0% | 17.2% | 17.0% | −0.2 | | 390 | SalzlandkreisSaxony-Anhalt | 18.5% | 17.3% | 17.0% | −0.3 | | 392 | GreizThuringia | 19.6% | 17.3% | 16.9% | −0.4 | | 392 | Hagen, Stadt der FernUniversi.North Rhine-Westphalia | 15.0% | 16.8% | 16.9% | +0.1 | | 394 | Wilhelmshaven, StadtLower Saxony | 15.6% | 17.3% | 16.8% | −0.5 | | 395 | ZwickauSaxony | 18.4% | 16.6% | 16.4% | −0.2 | | 396 | VogtlandkreisSaxony | 18.6% | 17.0% | 16.3% | −0.7 | | 397 | Salzgitter, StadtLower Saxony | 13.0% | 14.7% | 16.2% | +1.5 | | 397 | Wolfsburg, StadtLower Saxony | 14.7% | 16.3% | 16.2% | −0.1 | | 399 | HolzmindenLower Saxony | 14.2% | 16.0% | 16.1% | +0.1 | | 400 | Chemnitz, StadtSaxony | 17.4% | 15.4% | 14.8% | −0.6 | Rent burden in %: the share of net income that a single person on the median full-time wage spends on the warm rent of a newly rented 50 m² apartment. Change in percentage points. District names are the official German ones. A word after the comma, such as “Stadt”, marks an independent city. Source: Federal Employment Agency (Bundesagentur für Arbeit), empirica regio / VALUE Marktdaten. ## Methodology in brief - **Rent burden.** The warm rent (rent including heating and service charges) of a newly rented 50 m² apartment, divided by the net income of a single person on the median full-time wage. - **Wages.** Earnings statistics of the Federal Employment Agency (Bundesagentur für Arbeit): median gross monthly earnings of full-time employees at their place of work, converted to net with flat-rate deductions. - **Rents.** Advertised rents for new leases, all construction years, from the [empirica real estate price index](https://empirica-regio.de/produkte/preisindex/) (empirica regio / VALUE Marktdaten). Existing leases are usually cheaper. - **West and East.** Averages of the districts, with each district counting equally. West covers the ten western states, including Hamburg and Bremen. East covers the five eastern states. Berlin is shown separately. Including Berlin, the East would be at 21.7% in 2025, which does not change the finding. - **Robustness checks.** Three other ways of calculating leave the West clearly above the East in 2025: wages at the place of residence, districts weighted by the number of full-time employees, and sliding-scale deductions. **Full methodology** ### Methodology The rent burden is the warm rent of a newly rented 50 m² apartment as a share of the net income of a single person with a full-time job. Warm rent means rent including heating and service charges. Wages are the median gross monthly earnings of full-time employees at their place of work, from the [Federal Employment Agency’s earnings statistics](https://statistik.arbeitsagentur.de/SiteGlobals/Forms/Suche/Einzelheftsuche_Formular.html?nn=1592932&topic_f=beschaeftigung-entgelt-entgelt) (Bundesagentur für Arbeit, in German), with 31 December as the reference date. The figures for 2025 were published in July 2026. Net income here means gross pay minus a flat-rate deduction of 30, 35 or 40%, depending on annual income. Rents are advertised rents for new leases, covering all construction years, from the [empirica real estate price index](https://empirica-regio.de/produkte/preisindex/) (empirica-Immobilienpreisindex). Source: empirica regio / VALUE Marktdaten. To get the warm rent, 25% is added to the rent excluding heating and service charges. Existing leases are usually cheaper, and anyone earning less than the median carries a higher burden. West and East are averages of the districts, with each district counting equally. East covers the five eastern states: Brandenburg, Mecklenburg-Western Pomerania, Saxony, Saxony-Anhalt and Thuringia. Berlin is shown separately. Including Berlin, the East would be at 21.7% in 2025, which does not change the finding. Three robustness checks confirm the gap between West and East. With wages at the place of residence instead of the place of work, the rent burden in 2025 is 23.3% in the West and 20.6% in the East. Weighted by the number of full-time employees living in each district, it is 24.9% and 22.0%. With sliding-scale instead of flat-rate deductions, it is 24.3% and 21.4%. The original study used wages at the place of work, so the update does the same. The 2014 and 2024 values were recalculated from the original study's data. Rounding can make them differ by 0.1 percentage points. In eleven districts, the original study had used wage data from a different year. With the matching data, their 2024 rent burden is 1.4 to 1.9 percentage points lower. In Landkreis Sächsische Schweiz-Osterzgebirge, the 2014 value is also 1.8 percentage points lower. For Main-Kinzig-Kreis, the Federal Employment Agency revised its wage series retroactively (2024: 27.2% instead of 25.7%). These corrections do not change the number of districts above 30%. Graphics and text: DataPulse Research · Source: Federal Employment Agency (Bundesagentur für Arbeit), empirica regio / VALUE Marktdaten · Map base: © EuroGeographics for the administrative boundaries, Eisenach shown as part of Wartburgkreis. '; const chg = v => { v = Math.round(v*10)/10; return v < -2 ? CHG_C[0] : v < 0 ? CHG_C[1] : v === 0 ? CHG_C[2] : v < 2 ? CHG_C[3] : v < 4 ? CHG_C[4] : v < 6 ? CHG_C[5] : CHG_C[6]; }; const SHORT = {DE300:'Berlin',DE404:'Potsdam',DE406:'Dahme-Spreewald',DE408:'Havelland',DE40A:'Oberhavel',DE40E:'Potsdam-Mittelmark',DE405:'Barnim',DED51:'Leipzig',DED41:'Chemnitz',DE212:'Munich',DE21C:'Fürstenfeldbruck'}; const ZOOM = { berlin:['DE300','DE404','DE406','DE408','DE40A','DE40E','DE405'], sachsen:K.filter(r=>r.bl==='Sachsen').map(r=>r.id), muenchen:K.filter(r=>['München, Landeshauptstadt','Landkreis München','Fürstenfeldbruck','Dachau','Ebersberg','Starnberg','Erding','Freising'].includes(r.n)).map(r=>r.id) }; const CROSS = +'2017'; const STATES = { 'lines-2014':{v:'lines',upto:2014}, 'lines-cross':{v:'lines',upto:CROSS}, 'lines-2025':{v:'lines',upto:2025}, 'bars':{v:'bars'}, 'lines-berlin':{v:'lines',upto:2025,berlin:true}, 'map-level':{v:'map',m:'mb25',z:null}, 'map-change':{v:'map',m:'chg',z:null}, 'map-berlin':{v:'map',m:'mb25',z:'berlin',hl:ZOOM.berlin}, 'map-berlin-wo':{v:'map',m:'mbw25',z:'berlin',hl:ZOOM.berlin}, 'map-sachsen':{v:'map',m:'mb25',z:'sachsen',hl:['DED51','DED41']}, 'map-muenchen':{v:'map',m:'mb25',z:'muenchen',hl:['DE212','DE21C']}, 'map-all':{v:'map',m:'mb25',z:null} }; /* hero: in the first step on desktop, above the scrolly on phones (one element, moved) */ const hero = $('dps-hero'); $('dps-next').addEventListener('click', ()=>{ const s = document.querySelector('.dps .step:not(.step-hero)'); if (s) s.querySelector('.card').scrollIntoView({behavior: reduce ? 'auto' : 'smooth', block:'center'}); }); /* Keyboard: inside the scrolly, arrow down/up moves one whole step, like a slide. Desktop only; never while typing; past the last step (or before the first) the browser scrolls normally again. */ (function(){ const sec = document.querySelector('.dps .scrolly'), steps = [...document.querySelectorAll('.dps .scrolly .step')]; const target = st => st.querySelector('.card') || st.querySelector('header') || st; let busy = 0, last = -1; document.addEventListener('keydown', e => { if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return; if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey || isMobile()) return; const a = document.activeElement; if (a && (a.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(a.tagName))) return; const r = sec.getBoundingClientRect(), mid = innerHeight / 2; if (e.key === 'ArrowUp' && r.bottom < mid && r.bottom > -200) { /* just below the scrolly: one press back to its last step */ e.preventDefault(); if (e.repeat && Date.now() < busy) return; busy = Date.now() + (reduce ? 0 : 600); last = steps.length - 1; target(steps[last]).scrollIntoView({behavior: reduce ? 'auto' : 'smooth', block: 'center'}); return; } if (r.top > mid || r.bottom < mid) return; /* scrolly not on screen */ let cur = 0, best = Infinity; steps.forEach((st, i) => { const c = target(st).getBoundingClientRect(), d = Math.abs((c.top + c.bottom) / 2 - mid); if (d < best) { best = d; cur = i; } }); if (Date.now() < busy && last >= 0) cur = last; /* quick presses during the glide count from where it is heading */ const next = cur + (e.key === 'ArrowDown' ? 1 : -1); if (next >= steps.length) { /* last step: one more press lands at the start of what follows */ const after = sec.nextElementSibling, ar = after && after.getBoundingClientRect(); if (!ar || ar.top < 80) return; /* already there: normal scrolling */ e.preventDefault(); if (e.repeat && Date.now() < busy) return; busy = Date.now() + (reduce ? 0 : 600); last = -1; scrollTo({top: scrollY + ar.top - 24, behavior: reduce ? 'auto' : 'smooth'}); return; } if (next < 0) return; /* above the first step: normal scrolling */ e.preventDefault(); if (e.repeat && Date.now() < busy) return; /* a held key does not race ahead */ busy = Date.now() + (reduce ? 0 : 600); last = next; target(steps[next]).scrollIntoView({behavior: reduce ? 'auto' : 'smooth', block: 'center'}); }); })(); function placeHero(){ const t = window.innerWidth < 900 ? $('dps-hero-slot') : $('dps-hero-home'); if (hero.parentElement !== t) t.appendChild(hero); } placeHero(); const svg = d3.select('#dps-svg'), legend = $('dps-legend'), tip = $('dps-tip'); const gLines = svg.append('g').attr('class','layer'), gBars = svg.append('g').attr('class','layer'), gMap = svg.append('g').attr('class','layer'); const mapInner = gMap.append('g'), mapPaths = mapInner.append('g'), mapLabels = gMap.append('g'); let cur = 'map-change', curStep = null, proj, path; const heroActive = () => !curStep || curStep.id === 'dps-hero-home'; const isMobile = () => window.innerWidth < 900; const narrow = () => isMobile() || $('dps-graphic').getBoundingClientRect().width < 600; /* e.g. iPad landscape inside the theme: study 920 px wide */ const navOn = () => window.innerWidth >= 1280; function box(){ const r = $('dps-graphic').getBoundingClientRect(), W = r.width, H = r.height; const left = isMobile() ? 16 : 0, top = isMobile() ? (STATES[cur] && STATES[cur].v === 'map' ? 150 : 118) : (STATES[cur] && STATES[cur].v === 'map' ? 140 : 70); let bottom = 64, heroPush = 0; if (!isMobile() && heroActive()) { /* the 600 px headline reaches into the graphic: keep the map clear of it */ const ht = document.querySelector('.dps .hero-title').getBoundingClientRect(); heroPush = Math.max(0, ht.right - r.left + 24); } if (isMobile()) { /* phones: the graphic ends above the actual card of the current step, whatever its height */ const c = curStep && curStep.querySelector('.card'), ch = c ? c.getBoundingClientRect().height : H*0.4; bottom = Math.max(H*0.44, ch + H*0.06 + (STATES[cur] && STATES[cur].v !== 'map' ? 64 : 20)); bottom = Math.min(bottom, H - top - 180); /* short phones (SE, Safari bars): keep at least 180 px of plot, the card may overlap its foot */ } const right = isMobile() ? 16 : (navOn() ? 230 : 40); return {x:left + heroPush, y:top, w:W-left-right-heroPush, h:H-top-bottom}; } function legendHTML(title, c, ticks, foot){ /* ruler legend: values sit on the colour boundaries */ return ' '+title+' '+c.map(col=>'').join('')+' '+ticks.map(([p,l])=>''+l+'').join('')+' '+(foot||'')+' Source: Federal Employment Agency (Bundesagentur für Arbeit), empirica regio / VALUE Marktdaten · Map: © EuroGeographics '; } function drawLines(st, t){ const b = box(); gLines.selectAll('*').remove(); const x = d3.scaleLinear().domain([2014,2025]).range([b.x+46, b.x+b.w-(narrow()?8:180)]); const y = d3.scaleLinear().domain([16,36]).range([b.y+b.h, b.y]); const ax = gLines.append('g').attr('class','axis'); [16,20,24,28,32].forEach(v=>{ax.append('line').attr('x1',x(2014)).attr('x2',x(2025)).attr('y1',y(v)).attr('y2',y(v)); ax.append('text').attr('x',x(2014)-8).attr('y',y(v)+4).attr('text-anchor','end').text(v+(v===32?'%':''));}); (narrow()?[2014,2017,2021,2025]:[2014,2016,2018,2020,2022,2025]).forEach(yr=>ax.append('text').attr('x',x(yr)).attr('y',y(16)+22).attr('text-anchor','middle').text(yr)); const series = [['west','West'],['ost','East excl. Berlin']].concat(st.berlin?[['berlin','Berlin']]:[]); series.forEach(([k,name])=>{ const pts = L.years.map((yr,i)=>[yr,L[k][i]]).filter(p=>p[0]<=st.upto); const p = gLines.append('path').attr('d',d3.line().x(q=>x(q[0])).y(q=>y(q[1]))(pts)).attr('fill','none').attr('stroke',COL[k]).attr('stroke-width',k==='berlin'?2.5:4).attr('stroke-linejoin','round'); if (t && !reduce && pts.length>1){ const len=p.node().getTotalLength(); p.attr('stroke-dasharray',len).attr('stroke-dashoffset',len).transition().duration(1100).attr('stroke-dashoffset',0); } const last = pts[pts.length-1]; gLines.append('circle').attr('cx',x(last[0])).attr('cy',y(last[1])).attr('r',5).attr('fill',COL[k]); const endAnchor = narrow() && st.upto===2025; let dy = endAnchor ? (k==='west' ? -12 : 22) : (k==='west' ? -10 : k==='ost' ? 20 : 4); if (st.upto===2014) dy = k==='ost' ? -12 : 22; const ly = (endAnchor && k==='berlin') ? y(d3.max(pts, q=>q[1])) - 14 : y(last[1]) + dy; /* phones: Berlin label sits above its 2024 peak, clear of the line */ gLines.append('text').attr('class','linelabel').attr('x',x(last[0])+(endAnchor?-6:10)).attr('y',ly).attr('fill',COL[k]) .attr('text-anchor',endAnchor?'end':'start').text(name+' '+pct(last[1])); }); if (st.upto>=CROSS && !st.berlin){ const i = L.years.indexOf(CROSS); gLines.append('circle').attr('cx',x(CROSS)).attr('cy',y((L.west[i]+L.ost[i])/2)).attr('r',16).attr('fill','none').attr('stroke','#FFFFFF').attr('stroke-width',1.2).attr('stroke-dasharray','3 3'); } const src = gLines.append('text').attr('class','note').attr('x',x(2014)-40).attr('y',y(16)+(narrow()?36:38)); if (narrow()) { src.style('font-size','11px'); src.append('tspan').attr('x',x(2014)-40).text('Source: Federal Employment Agency'); src.append('tspan').attr('x',x(2014)-40).attr('dy','1.15em').text('(Bundesagentur für Arbeit), empirica regio /'); src.append('tspan').attr('x',x(2014)-40).attr('dy','1.15em').text('VALUE Marktdaten'); } else { src.append('tspan').attr('x',x(2014)-40).text('Source: Federal Employment Agency (Bundesagentur für Arbeit),'); src.append('tspan').attr('x',x(2014)-40).attr('dy','1.3em').text('empirica regio / VALUE Marktdaten · DataPulse Research'); } gLines.append('text').attr('class','note').attr('x',x(2014)-40).attr('y',b.y-22).text(narrow() ? 'Warm rent as % of net income' : 'Rent burden: warm rent as a share of net income'); } function drawBars(t){ const b = box(); gBars.selectAll('*').remove(); const groups = [['West','west',B.west_miete,B.west_netto],['East excl. Berlin','ost',B.ost_miete,B.ost_netto]]; const gw = Math.min(b.w, 620), x0 = b.x + (b.w-gw)/2; const y = d3.scaleLinear().domain([0,70]).range([b.y+b.h-30, b.y+30]); gBars.append('text').attr('class','note').attr('x',x0).attr('y',b.y+6).text('Increase 2014 to 2025, average of the districts'); const bsrc = gBars.append('text').attr('class','note').attr('x',x0).attr('y',y(0)+64).style('font-size','11px'); if (narrow()) { bsrc.append('tspan').attr('x',x0).text('Source: Federal Employment Agency'); bsrc.append('tspan').attr('x',x0).attr('dy','1.3em').text('(Bundesagentur für Arbeit),'); bsrc.append('tspan').attr('x',x0).attr('dy','1.3em').text('empirica regio / VALUE Marktdaten'); } else { bsrc.append('tspan').attr('x',x0).text('Source: Federal Employment Agency (Bundesagentur für Arbeit),'); bsrc.append('tspan').attr('x',x0).attr('dy','1.3em').text('empirica regio / VALUE Marktdaten'); } groups.forEach((g,gi)=>{ const gx = x0 + gi*gw/2 + 20, bw = Math.min(90,(gw/2-60)/2); [['Rent',g[2],COL[g[1]]],['Net wage',g[3],'#6b6b6b']].forEach((d,j)=>{ const bx = gx + j*(bw+14); const r = gBars.append('rect').attr('x',bx).attr('width',bw).attr('rx',4).attr('fill',d[2]).attr('y',y(0)).attr('height',0); (t&&!reduce?r.transition().duration(900).delay(j*150):r).attr('y',y(d[1])).attr('height',y(0)-y(d[1])); gBars.append('text').attr('class','linelabel').attr('x',bx+bw/2).attr('y',y(d[1])-8).attr('text-anchor','middle').attr('fill','#FFFFFF').text('+'+d[1]+'%'); gBars.append('text').attr('class','note').attr('x',bx+bw/2).attr('y',y(0)+18).attr('text-anchor','middle').text(d[0]); }); gBars.append('text').attr('class','linelabel').attr('x',gx+bw+7).attr('y',y(0)+42).attr('text-anchor','middle').attr('fill',COL[g[1]]).text(g[0]); /* centred under its pair */ }); } function fitTo(ids){ const b = box(); const feats = ids ? GEO.features.filter(f=>ids.includes(f.properties.id)) : GEO.features; const [[x0,y0],[x1,y1]] = path.bounds({type:'FeatureCollection',features:feats}); const s = (ids ? 0.8 : 1)*Math.min(b.w/(x1-x0), b.h/(y1-y0)); return {s, tx:b.x + b.w/2 - s*(x0+x1)/2, ty:b.y + b.h/2 - s*(y0+y1)/2}; } function buildMap(){ const b = box(); proj = d3.geoConicConformal().parallels([48.67,53.67]).rotate([-10.5,0]).fitSize([b.w,b.h], GEO); path = d3.geoPath(proj); mapPaths.selectAll('path').data(GEO.features).join('path').attr('d',path) .attr('stroke','#0A0A0A').attr('stroke-width',0.6).attr('vector-effect','non-scaling-stroke') .on('mousemove', (e,f)=>showTip(e,f)).on('mouseleave', hideTip).on('click',(e,f)=>showTip(e,f)); } const valueOf = (r,m) => m==='chg' ? r.mb25-r.mb14 : r[m]; function drawMap(st, t){ const tr = fitTo(st.z ? ZOOM[st.z] : null); (t&&!reduce ? mapInner.transition().duration(1000) : mapInner).attr('transform',`translate(${tr.tx},${tr.ty}) scale(${tr.s})`); const ps = mapPaths.selectAll('path'); (t&&!reduce?ps.transition().duration(700):ps).attr('fill',f=>{const r=byId.get(f.properties.id); if(!r) return '#333'; const v=valueOf(r,st.m); return st.m==='chg'?chg(v):lvl(v);}) .attr('opacity',1); mapPaths.selectAll('path').filter(f=>st.hl && st.hl.includes(f.properties.id)).raise().attr('stroke','#FFFFFF').attr('stroke-width',2).style('filter','drop-shadow(0 0 1.5px #000) drop-shadow(0 0 1px #000)'); mapPaths.selectAll('path').filter(f=>!(st.hl && st.hl.includes(f.properties.id))).attr('stroke','#0A0A0A').attr('stroke-width',0.6).style('filter',null); mapLabels.selectAll('*').remove(); const OFF = isMobile() ? {DE404:[6,10], DE408:[-10,-16], DE300:[16,-8], DE40E:[-4,24], DE21C:[-22,0], DE212:[20,0], DED51:[0,-30], DED41:[0,34]} : {DE404:[-34,16], DE300:[10,-10], DED51:[0,-30], DED41:[0,34]}; /* labels: the Kreis the card names goes first, then Berlin, then the rest; a label that finds no free spot is dropped (the Kreis stays outlined and has its tooltip) */ const said = (curStep && curStep.textContent) || '', gb = $('dps-graphic').getBoundingClientRect(), placed = []; const ids = (st.hl||[]).filter(id=>SHORT[id]).map((id,k)=>[id, said.includes(SHORT[id]) ? 0 : id==='DE300' ? 1 : 2, k]).sort((a,c)=>a[1]-c[1]||a[2]-c[2]).map(a=>a[0]); ids.forEach(id=>{ const f = GEO.features.find(g=>g.properties.id===id), r = byId.get(id); if(!f||!r) return; let [cx,cy] = path.centroid(f); cx = tr.tx + tr.s*cx; cy = tr.ty + tr.s*cy; const off = OFF[id] || [0,0]; cx += off[0]; cy += off[1]; const v = st.m==='chg' ? (fmt(r.mb14)+' → '+pct(r.mb25)) : pct(valueOf(r,st.m)); const g = mapLabels.append('g'); const tx = g.append('text').attr('class','maplabel').attr('x',cx).attr('y',cy).attr('text-anchor','middle'); tx.append('tspan').attr('x',cx).attr('dy',id==='DE300'?-4:0).text(SHORT[id]); tx.append('tspan').attr('class','v').attr('x',cx).attr('dy','1.15em').text(v); const bb = tx.node().getBBox(), pad = 3; const fits = (dx,dy)=>{ const a={x:bb.x+dx-pad,y:bb.y+dy-pad,w:bb.width+2*pad,h:bb.height+2*pad}; if (a.x < 4 || a.x+a.w > gb.width-4 || a.y < 4 || a.y+a.h > gb.height-4) return null; return placed.some(q=>a.x''; tip.innerHTML = ' '+blName(r.bl)+' '+r.n+' '+ ' 2025'+bar(r.mb25,'#7178CE')+' **'+pct(r.mb25)+'** '+ ' 2014'+bar(r.mb14,'#6b6b6b')+''+pct(r.mb14)+' '+ ' With wages at the place of residence, 2025: '+pct(r.mbw25)+' '; tip.style.left = Math.min(e.clientX+14, window.innerWidth-230)+'px'; tip.style.top = Math.min(e.clientY+14, window.innerHeight-150)+'px'; tip.style.opacity = 1; } function hideTip(){ tip.style.opacity = 0; } function render(name, animate){ const st = STATES[name]; cur = name; gLines.attr('opacity', st.v==='lines'?1:0); gBars.attr('opacity', st.v==='bars'?1:0); gMap.attr('opacity', st.v==='map'?1:0); gMap.style('pointer-events', st.v==='map'?'all':'none'); $('dps-graphic').classList.toggle('zoomed', st.v==='map' && !!st.z); /* left fade only where a zoomed map meets the text column */ legend.style.opacity = st.v==='map' ? 1 : 0; if (st.v==='lines') drawLines(st, animate); if (st.v==='bars') drawBars(animate); if (st.v==='map') drawMap(st, animate); if (st.v!=='map') hideTip(); } buildMap(); render(cur, false); /* Step trigger. Desktop: a step becomes active when it crosses the middle band (45-55% of the viewport). Phones: a step is 100vh tall with its card at the bottom, so the middle band switched the graphic about half a screen before the new card appeared, while the previous card was still on screen (the map showed place-of-residence 32.7% next to a card saying 36.6%). On phones the band sits at 8-9% from the top instead: a step becomes active when its card is almost at its resting place and the previous card has left the screen. One step covers the band at a time, so the switch happens at the same point scrolling down and scrolling up. */ let obs = null, obsPhone = null; function observeSteps(){ const ph = isMobile(); if (obs && obsPhone === ph) return; if (obs) obs.disconnect(); obsPhone = ph; obs = new IntersectionObserver(es=>{ es.forEach(e=>{ if(e.isIntersecting){ const s=e.target.dataset.state, wasHero = heroActive(); curStep = e.target; if(s!==cur || wasHero !== heroActive()) render(s, true); } }); },{rootMargin: ph ? '-8% 0px -91% 0px' : '-45% 0px -45% 0px'}); document.querySelectorAll('.dps .step').forEach(s=>obs.observe(s)); } observeSteps(); let rt; window.addEventListener('resize',()=>{clearTimeout(rt); rt=setTimeout(()=>{placeHero(); observeSteps(); buildMap(); render(cur,false);},150);}); document.addEventListener('click',e=>{ if(!e.target.closest('#dps-svg')) hideTip(); }); window.addEventListener('scroll', hideTip, {passive:true}); document.addEventListener('scroll', hideTip, {passive:true, capture:true}); /* ---------- sticky section nav ---------- */ const nav = $('dps-nav'), links = [...nav.querySelectorAll('a')]; const targets = links.map(a => document.querySelector(a.getAttribute('href'))); function navTick(){ const scTop = document.querySelector('.dps .scrolly').getBoundingClientRect().top; nav.classList.toggle('visible', scTop < -window.innerHeight*0.6); let act = -1; targets.forEach((t,i)=>{ if (t && t.getBoundingClientRect().top < window.innerHeight*0.55) act = i; }); links.forEach((a,i)=>a.classList.toggle('active', i===act)); } window.addEventListener('scroll', navTick, {passive:true}); navTick(); /* ---------- own Kreis: native dropdown, grouped by Bundesland ---------- */ const res = $('dps-res'), q = $('dps-q'); const eur = v => '€'+Math.round(v).toLocaleString('en-US'); (()=>{ const groups = new Map(); K.slice().sort((a,b)=>blName(a.bl).localeCompare(blName(b.bl),'en')||a.n.localeCompare(b.n,'de')).forEach(r=>{ const bl = blName(r.bl); if(!groups.has(bl)) groups.set(bl,[]); groups.get(bl).push([r.id, r.n]); }); const eis = K.find(r=>r.n==='Wartburgkreis'); if (eis) { const t = groups.get(blName('Thüringen')); t.push(['EIS', 'Eisenach (Wartburgkreis since 2021)']); t.sort((a,b)=>a[1].localeCompare(b[1],'de')); } groups.forEach((items, bl)=>{ const og = document.createElement('optgroup'); og.label = bl; items.forEach(([id,n])=>{ const o = document.createElement('option'); o.value = id; o.textContent = n; o.lang = 'de'; og.appendChild(o); }); q.appendChild(og); }); })(); function show(id){ const eis = id === 'EIS', r = eis ? K.find(k=>k.n==='Wartburgkreis') : byId.get(id); if(!r){ res.innerHTML=''; return; } const d = Math.round((r.mb25 - r.mb14)*10)/10, cls = d > 0 ? 'up' : d < 0 ? 'down' : 'flat'; const dTxt = (d > 0 ? '+' : d < 0 ? '−' : '±') + fmt(Math.abs(d)) + ' percentage points since 2014'; res.innerHTML = ' **'+pct(r.mb25)+'** of net income went to the warm rent of a newly rented 50 m² apartment in 2025 '+ ' '+eur(r.warm25)+' warm rent on '+eur(r.netto25)+' net pay a month (median full-time wage). Rank '+r.rk+' of '+K.length+', where rank 1 has the highest rent burden. '+ ' '+dTxt+'2014: '+pct(r.mb14)+' · 2024: '+pct(r.mb24)+' '+ ' With wages at the place of residence instead of the place of work: '+pct(r.mbw25)+'.'+(eis ? ' Eisenach has been part of Wartburgkreis since 2021.' : '')+' '; } q.addEventListener('change', ()=>show(q.value)); q.value = 'DED51'; show('DED51'); /* ---------- all Kreise table: search + sort (rows are server-rendered) ---------- */ const tb = document.querySelector('#dps-ct tbody'), rows = [...tb.rows], cnt = $('dps-ct-count'), cq = $('dps-ct-q'); let sortKey = 'mb25', asc = false; function applyTable(){ const v = cq.value.trim().toLowerCase(); let n = 0; rows.forEach(tr=>{ const hit = !v || tr.dataset.s.includes(v); tr.style.display = hit ? '' : 'none'; if (hit) n++; }); cnt.textContent = n + ' of ' + rows.length + ' districts'; } function sortTable(key){ if (key === sortKey) asc = !asc; else { sortKey = key; asc = key === 'n' || key === 'rank'; } const val = tr => key === 'n' ? tr.dataset.n : parseFloat(tr.dataset[key]); rows.sort((a,b)=>{ const x=val(a), y=val(b); return (key==='n' ? x.localeCompare(y,'de') : x-y) * (asc?1:-1); }).forEach(tr=>tb.appendChild(tr)); document.querySelectorAll('#dps-ct thead th[data-sort]').forEach(th=>{ th.classList.toggle('on', th.dataset.sort===sortKey); th.classList.toggle('asc', th.dataset.sort===sortKey && asc); th.setAttribute('aria-sort', th.dataset.sort===sortKey ? (asc?'ascending':'descending') : 'none'); }); } cq.addEventListener('input', applyTable); document.querySelectorAll('#dps-ct thead th[data-sort]').forEach(th=>{ th.tabIndex = 0; th.addEventListener('click',()=>sortTable(th.dataset.sort)); th.addEventListener('keydown',e=>{ if(e.key==='Enter'||e.key===' '){ e.preventDefault(); sortTable(th.dataset.sort);} }); }); })(); --- Source: https://www.datapulse.de/en/rent-burden-germany-east-west/