Sign in

Till Hafermann

@hafertill.bsky.social
131 followers 529 following 27 posts

💼 Journalist @ WDR 💚 News, DDJ, data viz, Tech, Gaming, Sport

PostsRepliesMedia
Till Hafermann @hafertill.bsky.social · 24/04/2025
Day 24 of #30DayChartChallenge: WHO data day. Sucks to be sick in Switzerland. Data: www.who.int/data/gho/dat...
This chart titled "Out-of-pocket health costs" shows how much individuals pay out-of-pocket on average in USD per year across different regions from 2000 to 2020. The data is organized into six regional panels: Africa, Americas, Eastern Mediterranean, Europe, South-East Asia, and Western Pacific.
In Africa, most countries show modest costs below $300, with Mauritius having the highest at around $250.
The Americas panel shows the USA with the highest costs, rising to approximately $1,300 by 2020, followed by Canada at about $900.
In the Eastern Mediterranean, Bahrain and UAE are highlighted, with UAE overtaking Bahrain in 2022 at approximately $500.
Europe shows Switzerland with dramatically higher costs than other countries, reaching nearly $2,400 by 2020, with Norway as the second highest at about $1,300.
South-East Asia shows generally low costs, with Maldives as the highest at around $200.
The Western Pacific region shows Singapore overtaking Australia in 2021, with both countries having costs between $800-1,000.
The visualization demonstrates significant regional disparities in healthcare costs, with Switzerland, the USA, and Norway having the highest out-of-pocket expenses globally.
Data source: WHO Global Health Observatory | #30daychartchallenge 2025 hafertill.bsky.social
1101
Till Hafermann @hafertill.bsky.social · 23/04/2025
Day 23 of #30DayChartChallenge: Log-Scale. Interactive version for all the labels: www.datawrapper.de/_/mun1B/ Data: thegamingsetup.com/console-powe...
A scatter plot titled 'Game on' showing how gaming consoles became exponentially more powerful over time (1996-2024). The y-axis shows GFLOPS (computing power) on a logarithmic scale from 0.1 to 10,000, while the x-axis shows launch years. Points are color-coded by manufacturer: Nintendo (red), Sega (purple), Sony (blue), Microsoft (green), and Valve (orange). Notable consoles are labeled, including N64, Dreamcast, PS2-PS5, Xbox through Xbox Series X, Switch, and Steam Deck. A gray trend line shows the exponential growth pattern. The visualization highlights that Microsoft's Xbox and Sony's PlayStation compete for 'most powerful console' while Nintendo tends to produce less powerful systems. Data sourced from thegamingsetup.com and Wikipedia.
0172
Till Hafermann @hafertill.bsky.social · 22/04/2025
Day 22 of #30DayChartChallenge: Stars. I decided on a Star Trek chart and got a bit carried away trying to mimic the LCARS displays. 😅 Data: memory-alpha.fandom.com/wiki/Enterpr...
LCARS-style Star Trek timeline visualization showing service periods of Enterprise starships from NX-01 through NCC-1701-G. The chart displays commissioning dates, retirement/destruction points, and status information for each vessel in Federation Starfleet history from 2150 to 2400. Enterprise-G remains active as of 2402. The visualization mimics the orange and black computer interface from Star Trek with additional information about each ship.
072
Till Hafermann @hafertill.bsky.social · 21/04/2025
Day 21 of #30DayChartChallenge: Fossil. This chart depicts the absence of "fossil" - the adoption of electric cars across different countries. Data: ourworldindata.org/electric-car...
This chart, titled "Skol," highlights the leadership of Scandinavian countries in electric vehicle (EV) adoption, including both full battery-electric and plug-in hybrid vehicles. The visualization is a line graph showing the percentage of new car sales that are EVs from 2010 to 2023. Norway leads significantly with 93% in 2023, followed by Iceland at 71%, Sweden at 60%, Finland at 54%, and Denmark at 46%. China is also notable with 38%, while the global average stands at 18%, and the USA is at 9.5%. The graph shows a steep increase in EV adoption, particularly in Norway, starting around 2016. The data is sourced from the IEA Global EV Outlook 2024 and is part of the #30daychartchallenge 2025 by hafertill.bsky.social.
0121
Till Hafermann @hafertill.bsky.social · 20/04/2025
Day 20 of #30DayChartChallenge: Urbanization. Data: ourworldindata.org/grapher/popu...
Six stacked area charts show the change in urbanization across world regions (Africa, Asia, Europe, North America, Oceania, and South America) from 1975 to 2020. Each chart displays the share of population living in cities (purple), towns (teal), and villages (yellow).

Across all regions, the share of people living in cities increased over time, while village populations declined. Africa and Asia show the most pronounced shift from rural to urban living. In contrast, Europe, North America, and Oceania had relatively stable urban shares, with cities already dominant in 1980. South America also saw a steady increase in urban population. Y-axis ranges from 0 to 100%, labeled as "share of population"; x-axis spans years from 1975 to 2020.

Above the plots, a title reads “Urbanization.” A subtitle explains that the data is estimated by the European Commission using satellite and census data (1975–2020). A legend identifies the color coding for cities, towns, and villages. The data source is cited at the bottom of the image.
041
Till Hafermann @hafertill.bsky.social · 20/04/2025
Day 19 of #30DayChartChallenge: Smooth. Couldn't find more current data... Might be fun to repeat later. Data: www.kaggle.com/datasets/leo...
This visualization, titled "Less energy, more ... dancing?", explores the acoustic properties of Billboard Top 10 songs from 2010 to 2019. It consists of six small scatter plots, each representing a different acoustic property: bpm (beats per minute), danceability, duration, energy, loudness, and valence. Each plot shows individual data points as gray dots, with a red trend line indicating changes over time. The bpm plot shows a slight decrease, suggesting songs became a bit slower. Danceability shows a slight increase, indicating songs became more danceable. Duration remains relatively stable with a minor decrease. Energy decreases, indicating songs became less energetic. Loudness remains fairly constant, while valence shows a slight decrease, suggesting a minor shift towards more negative emotional tones. The data was sourced from Spotify via Kaggle and is part of the #30daychartchallenge 2025 by hafertill.bsky.social.
062
Till Hafermann @hafertill.bsky.social · 18/04/2025
Since I am still behind on the #30DayChartChallenge, this is a combined chart for "negative" (day 16) and "birds" (day 17). Nothing fancy, but a sad indicator of how we keep treating our planet. Data covers 168 monitored species in 30 European countries. Source: pecbms.info/trends-and-i...
A line graph titled "Bird numbers in Europe" showing population decline from 1980 to 2023. Three lines track different bird populations with 1980 as the baseline (100%). Forest birds (teal line) declined by 8%, all birds (purple line) declined by 18%, and farmland birds (orange line) experienced the steepest decline at 60%. The graph includes confidence intervals shown as shaded areas around each line. Data source: Pan-European Common Bird Monitoring Scheme (PECBMS), 2024 update.
1162
Till Hafermann @hafertill.bsky.social · 17/04/2025
Late entry for #30DayChartChallenge Day 15: Complicated. What's more complicated than millions of rows of IMDB data in a network? Had to analyze a specific subset because of hardware. Data: developer.imdb.com/non-commerci... Tools: R (tidygraph, ggraph, data.table), edited in Affinity Photo.
This visualization shows a network diagram titled "Action!" that maps how often actors played together in action movies since 2000. The image displays interconnected nodes where each dot represents an actor, and lines between them show collaborations. The ten largest sub-networks are color-coded and labeled: 1. American Voice Actors, mainly Anime (purple), 2. Telugu Cinema (Tollywood) (purple), 3. Hindi Cinema (Bollywood) (blue), 4. Japanese Anime Voice Actors (blue), 5. Bengali Cinema (Dhallywood) (teal), 6. Malayalam Cinema (teal), 7. Japanese Anime Voice Actors (green), 8. Pakistani Cinema (Lollywood) (green), 9. Marvel Movies (lime green), and 10. American Cartoon Voice Actors (yellow). The visualization only includes actors who have appeared in at least ten movies together. Data source is listed as IMDB, dated 2025-04-15.
0111
Till Hafermann @hafertill.bsky.social · 14/04/2025
Day 14 of #30DayChartChallenge: Kinship. Maybe not perfect for visualization category "relationships", but I found this interesting: The percentage of kids with single parents varies a lot in Europe. Data: ec.europa.eu/CensusHub/ Tools: Data prep in R (mainly dplyr), viz with @datawrapper.de.
Heat map of Europe showing the percentage of children living with single parents in 2021. Countries are colored from light yellow (lower percentages) to deep purple (higher percentages). Latvia has the highest rate at 53.9%, while the Netherlands has the lowest at 19.3%. The color scale ranges from 19% to 54%. For several Eastern European countries and the UK there is no data available. Data source: Eurostat/Census 2021.
0122
Till Hafermann @hafertill.bsky.social · 14/04/2025
My entry for day 13 of #30DayChartChallenge: Clusters. Not super insightful, but a nice way to brush up my statistical analysis skills. Data: www.kaggle.com/datasets/sky... Tools: R(base and ggplot), edited in Affinity Designer, and some help on the way from ChatGPT.
Visualization titled 'Songs of the 90s, clustered' showing K-means clustering of19901 songs from the 1990s based on audio features. Six distinct clusters are mapped on two principal components axes (Chill↔Hype horizontally, Shorter/dancey↔Longer/serious vertically). Clusters include: upbeat pop, mellow chill, slow acoustic, high danceability, intense rock, and confident alt pop/rock. Each cluster appears as a colored cloud of dots representing individual songs. Data from Spotify via Kaggle.
0143
Till Hafermann @hafertill.bsky.social · 14/04/2025
A little behind on the #30DayChartChallenge. So here is day 12: data.gov. Data: www.ncei.noaa.gov/access/metad... Tools: R(dplyr, zoo for rolling average, ggplot), edited in Affinity Designer.
Chart showing billion-dollar disasters in the U.S. from 1980 to 2023. The top graph displays inflation-adjusted costs per year, peaking at nearly $400B in 2017, with a rising 5-year average trend. The bottom graph shows increasing frequency of billion-dollar disasters by type (drought, flooding, freezing, storms, wildfires), with a dramatic rise since 2000 and reaching over 25 events annually in recent years. Data from NOAA.
091
Till Hafermann @hafertill.bsky.social · 11/04/2025
Day 11 of #30DayChartChallenge: The prompt "stripes" made me think of cliché prisoners. So here we go. Data: World Prison Brief www.prisonstudies.org/research-pub... Made with Tabula, Google Sheets and @datawrapper.de - interactive version: www.datawrapper.de/_/jxfwa/
World map showing the rate of prisoners per 100.000 people per country. Among the highest rates of countries with at least 1 million inhabitants are El Salvador (1086 prisoners per 100.000), Cuba (794), Rwanda (637), Turkmenistan (576) and the USA (531).
081
Till Hafermann @hafertill.bsky.social · 10/04/2025
Day 10 of #30DayChartChallenge: Multimodal. I tried my hand at a visualization video for the first time. Data: trends.withgoogle.com/year-in-sear... Tools: R(ggplot, ggridges, gganimate) and Da Vinci Resolve.
283
Till Hafermann @hafertill.bsky.social · 09/04/2025
Day 9 of #30DayChartChallenge: Diverging. NFL teams spend a crazy amount of money on players' salaries - but being the biggest spender does not guarantee success. Unfortunately, being frugal doesn't either, as I've come to learn being a Steelers fan. 🫠 Data: www.spotrac.com/nfl/cash/
"NFL: Does money buy wins?" - A scatter plot showing the relationship between NFL team salary spending (x-axis, in millions) and postseason success from 2015-2024. Each dot represents a team in a specific year, color-coded by playoff outcome: light blue for no playoffs, blue for reached playoffs, light green for reached Super Bowl, and dark green for won Super Bowl. The visualization highlights that Super Bowl winners (labeled with team abbreviations like KC, PHI, LAR) aren't necessarily big spenders, often falling in the middle range of salary totals. Green arrows point to winners with moderate spending, while blue arrows indicate high-spending teams that failed to make playoffs (like CLE at ~$350M and ATL at ~$300M). The years are arranged vertically on the y-axis, with salary spending shown horizontally from approximately $150M to $350M. The subtitle confirms: "Plotting the salary cash totals and postseason success reveals what fans already know: You can't buy titles." Data sourced from spotrac.com and nfl.com. #30daychartchallenge 2025.
0111
Till Hafermann @hafertill.bsky.social · 08/04/2025
Day 8 of #30DayChartChallenge: Histogram. I took a look at one of my favorite books, The Lord of the Rings. I like how you can see the shifting narratives here. Have fun exploring! 🔎 Data: www.kaggle.com/datasets/ash... Tools: R(tidytext, ggplot) and Affinity Designer.
"The Lord of the Rings, counted" - A data visualization showing character name frequency across all six books of The Lord of the Rings. The chart displays horizontal bar graphs for 10 characters (Frodo, Sam, Gandalf, Merry, Pippin, Aragorn, Gimli, Legolas, Boromir, and Gollum), with each bar representing mentions per chapter. The books are divided into 6 columns. Notable annotations include: "Frodo is the most mentioned name throughout the books," "Sam has his biggest part in Book 6 in Mordor," "Pippin has the highest count of any character in a single chapter when arriving in Minas Tirith with Gandalf," and "The Gimli-Legolas-bromance is mirrored in their name counts." The visualization shows how character prominence shifts across the narrative, with Boromir disappearing after Book 3 and Gollum becoming significant in Books 4 and 6. Data sourced from Kaggle, counting first names including nicknames across 62 chapters (excluding prologue and appendices). Tagged #30daychartchallenge 2025.
1223
Till Hafermann @hafertill.bsky.social · 07/04/2025
Day 7 of #30DayChartChallenge: Outliers. 💸 Data: www.forbes.com.au/news/billion... and www.kaggle.com/datasets/shu... Tools: R (dplyr, ggplot), edited in Affinity Designer.
A data visualization titled "Richer than rich" showing the distribution of net worth among the top 200 people in Forbes's Billionaires List from 2021 to 2025. The chart displays box plots for each year with individual billionaires represented as orange dots above them. Elon Musk stands out dramatically in 2025 at $342 billion (as of March 7th), far above all others. Previous years show Jeff Bezos at $177 billion in 2021, Musk at $219 billion in 2022, and Bernard Arnault and family taking the top spot in 2023 ($211 billion) and 2024 ($233 billion). The median wealth of the 200 richest people in 2025 was $19.1 billion, highlighting the extreme inequality even among billionaires. Data source: Forbes, in part via Kaggle, created for #30daychartchallenge 2025 by hafertill.bsky.social.
1121
Till Hafermann @hafertill.bsky.social · 06/04/2025
Day 6 of #30DayChartChallenge: Florence Nightingale Theme Day. Maybe not the ideal way to display this data, but a fun challenge to mimic the original "rose chart". Data: ourworldindata.org/emissions-by... Made with R{owidapi, dplyr and ggplot2}, edited in Affinity Designer.
Radial area chart showing global greenhouse gas emissions by sector from 2000 to 2021. Each year is a wedge in a circular layout, progressing clockwise. Emission values increase outward, with concentric rings marking 10, 20, 30, 40, and 50 billion tons. Each wedge is stacked by sector, color-coded:
• Dark gray = Energy supply (largest)
• Red = Buildings and construction
• Blue = Transport
• Olive green = Agriculture and land use
• Purple = Industry
• Orange = Waste (smallest)

From the center outward, wedges grow steadily larger, indicating overall increase in emissions. Years 2020–2021 are labeled “Covid years” and show a dip. 2015 is labeled “Year of Paris Agreement.” A text box at the top summarizes: Since 2000, emissions have risen overall, with energy, construction, and transport being major contributors. The color legend appears on the bottom right. Chart mimics Florence Nightingale’s data visual style. Data from Climate Watch via Our World In Data. Chart part of #30DayChartChallenge 2025 by hafertill.bsky.social.
061
Till Hafermann @hafertill.bsky.social · 05/04/2025
Day 5 of #30DayChartChallenge: Ranking! I used to think of borders as immovable. With what's happening in the world lately - not anymore. This chart shows that my original feeling was not so accurate to begin with. Data: en.wikipedia.org/wiki/List_of... Made in R, edited in Affinity Designer.
This image is a bar chart titled "The illusion of permanence," which explores how long the territories of various countries have remained unchanged. The chart highlights that, in most cases, national borders have not been static for very long.

The chart lists countries from Europe, Asia, and the Americas, along with the number of years their borders have remained unchanged. The countries are ranked, with San Marino at the top, having unchanged borders for 562 years. Other notable entries include Bahrain (504 years), Liechtenstein (306 years), and Malta (224 years).

Key points from the chart include:

San Marino's borders have been unchanged since 1463, which is over 562 years.
The chart also shows the G7 countries for comparison. None of them have had their current territory for more than 80 years, and only two have had unchanged borders for longer than 50 years.

Data Source: Wikipedia | #30daychartchallenge 2025
0111
Till Hafermann @hafertill.bsky.social · 04/04/2025
Day 4 of #30DayChartChallenge: Big or small. I'll admit it is a bit crowded, but nonetheless interesting (hopefully): The Bundesliga is very unequal in terms of market value, and teams like Mainz and Gladbach are performing better than market value might suggest.
This image shows a visualization titled "The inequality of the Bundesliga" displaying the market value of the 18 Bundesliga soccer teams' rosters as of April 4th, 2025. The teams are represented in different-sized blocks arranged in a treemap style, with block size corresponding to roster value.
Bayern Munich has the highest value at 859 million euros, represented by the largest block in dark green with their logo. The visualization notes that "Bayern's 859m is more than the lowest eight clubs combined." Other high-value clubs include Leverkusen (644m), Leipzig (511m), and Dortmund (436m).
The graphic uses a color-coding system to indicate European competition qualification status: dark green for Champions League (Bayern, Leverkusen, Frankfurt, Mainz), teal for Europa League (Gladbach), light blue for Europa Conference League (Leipzig), pink for relegation playoff (Heidenheim), and dark pink for relegation (Kiel, Bochum).
A note at the bottom states that "Mainz 05 currently sit in 4th place, massively overperforming with a 10th ranked roster value." The data source is listed as transfermarkt.de and kicker.de, part of a #30daychartchallenge 2025.
1267
Till Hafermann @hafertill.bsky.social · 03/04/2025
Day 3 of #30DayChartChallenge: Circular comparisons. How does the sound of The Beatles change over time? Averages of Spotify indicators by album, I used the remastered versions for comparability. Data: www.kaggle.com/datasets/art... Data prep with Excel, chart made with Flourish and Photoshop.
chart titled 'How the sound of The Beatles changes' showing radar charts for six Beatles albums: 'Please Please Me (1963),' 'With The Beatles (1963),' 'A Hard Day's Night (1964),' 'Yellow Submarine (1969),' 'Abbey Road (1969),' and 'Let It Be (1970).' Each chart displays average Spotify ratings for valence, energy, tempo, danceability, loudness, and acousticness. On average, the first studio albums by The Beatles sound rather energetic and positive, as indicated by the „valence" value, while later albums are more moody, according to Spotify data.
2182
Till Hafermann @hafertill.bsky.social · 03/04/2025
Day 2 of #30DayChartChallenge: Slope. Playing around with IMDB data.
A chart titled 'Downhill' showing the average ratings of the first and last seasons of the ten longest-running American scripted TV series. The chart highlights that only 'Gunsmoke' (1955-1975) has a better average rating for its last season compared to its first. Other series like 'Grey's Anatomy,' 'The Simpsons,' and 'Family Guy' show a decline in ratings from their first to last seasons. Data is sourced from IMDB ratings and Wikipedia.
0181
Till Hafermann @hafertill.bsky.social · 01/04/2025
Thought I'd try my hand at this year's #30DayChartChallenge, mainly to stay in shape with my favorite data viz tools. Day 1: Fractions. Data: ourworldindata.org/grapher/shar... Tools used: RStudio, main packages owidapi, dplyr, ggplot, then some editing in Affinity Designer.
Bar chart titled 'Everyone's online?' displaying the share of internet users in 2023 by world region, as defined by the World Bank. The global average is 67.4%. The regions and their respective internet usage percentages are: North America at 97.3%, Europe and Central Asia at 90.1%, Latin America and the Caribbean at 81.0%, East Asia and Pacific at 79.0%, Middle East and North Africa at 77.7%, and Sub-Saharan Africa at 36.7%. Data source: World Bank via Our World in Data, 2025. Created by Till Hafermann for the #30daychartchallenge 2025.
0172