The Rhythm of the European Vote: Exploring ESC Winners with Nested Line Diagrams in ConceptFlow

Authors: Anurag Sharma, Marcel Nöhre and Gerd Stumme

Reading time: 26 min

Keywords: Formal Concept Analysis, Nested Line Diagrams, Eurovision Song Contest, ConceptFlow

The Eurovision Song Contest (ESC) is one of the largest annual music competitions in the world. Beyond the performances themselves, its voting patterns have attracted considerable attention for decades, with recurring regional, cultural, historical, and political relationships often emerging between participating countries [3]. But winning songs also share something else: musical characteristics like tempo and key. This raises a natural question: is there a meaningful relationship between how a song is supported and what it actually sounds like?

Formal Concept Analysis (FCA) provides a natural framework for studying this question. Rather than trying to predict outcomes, FCA identifies combinations of attributes that occur together — and equally importantly, which combinations never do. These cooccurrences (and absences) can be expressed as implications, revealing dependencies between voting behaviour and musical characteristics.

To automate this kind of analysis, we built ConceptFlow [6], a scikit-learn-compatible Python library for Formal Concept Analysis. One of its core visualization tools is the nested line diagram, which layers multiple conceptual scales into a single interactive view. Here, the outer scale represents different notions of voting support, while the inner scale captures musical characteristics of winning songs.

This post accompanies our work, Exploring ESC Winners with Nested Diagrams, but takes a much more detailed and interactive approach. We’ll walk through the FCA concepts behind nested line diagrams, introduce the ESC winners dataset and the voting clusters we used, show how ConceptFlow constructs the visualization, and dig into every implication the data revealed. Along the way, you will be able to explore the interactive nested line diagram yourself.

Background

Before diving into the ESC dataset, let’s briefly cover the FCA concepts needed to understand nested line diagrams [2].

A formal context is a triple (G, M, I) consisting of a set G of objects, a set M of attributes, and an incidence relation I ⊆ G × M indicating which objects possess which attributes. In practice, this is nothing more than a binary table: rows are objects, columns are attributes, and each cell tells you whether that attribute applies.

A formal concept is a pair (A, B), where A is a set of objects (the extent) and B is the set of attributes (the intent), such that A consists of exactly the objects sharing all attributes in B, and B consists of exactly the attributes shared by all objects in A. This mutual closure is what makes concepts maximal: you cannot add an object to A without losing an attribute from B, and vice versa.

If we order these concepts by extent inclusion, we get a concept lattice, which arranges concepts hierarchically from the most general to the most specific. A visualization of this complete lattice is a line diagram: each node is a formal concept, and each edge represents a covering relation in the lattice’s order (the transitive reduction of the partial order) connecting a concept only to those immediately above or below it, with no concept in between.

Nested line diagrams extend this idea by separating the attributes into multiple conceptual scales. Instead of building a single concept lattice over every attribute, we built a separate lattice for each scale. The outer lattice represents one group of attributes, and a copy of the inner lattice is placed inside every concept of the outer lattice. Filled nodes mark concepts that occur in the original context, whereas hollow nodes indicate implications, revealing combinations of attributes that never occur without additional conditions.

This kind of splitting only works because of a specific mathematical relationship between the two resulting contexts. When a formal context is divided into two disjoint groups of attributes over the same objects, the two parts are said to form an apposition. Ganter and Wille [2] showed that the concept lattice of the original, undivided context always embeds into the product of the two lattices built from each half of the apposition, an embedding known as a subdirect product. In practice, this guarantees that every concept in the full context corresponds to exactly one pairing of an outer concept and an inner concept, so we lose nothing by drawing the two lattices separately and simply marking which pairs actually occur together.

The ESC Winner Dataset

To demonstrate ConceptFlow and nested line diagrams, we analyse the winners of the ESC from 1975 to 2025, excluding the cancelled 2020 contest, resulting in a dataset of 50 winning entries. Restricting the analysis to winners keeps the resulting visualization compact and readable while focusing on the songs that successfully attracted support across Europe. The complete voting data and song metadata are obtained from the publicly available ESC dataset (GitHub repository).

Voting and musical data

For every winning song, we collect two complementary types of information. The first describes how the song was supported. Before 2016, ESC published a single combined voting result; from 2016 onward, jury and public televote results have been reported separately. To get one consistent voting profile per winner, we follow the same approach as in the accompanying paper: for contests before 2016, we use the combined result, and for later contests, we take whichever of the jury or televote awarded the larger total number of points. The second type of information describes what the song actually sounds like. For each winner, we record its tempo in beats per minute (BPM) along with its musical key.

The outer scale: voting support

The outer scale captures whether a winning entry received strong support from four complementary perspectives of ESC voting:

 

Type Description
Regional Geographical proximity
Cultural Shared language and cultural affinity
Historical Historical ties and shared past
Political Political and economic alliances

 

Unlike data-driven clustering methods, these taxonomies were constructed manually to reflect commonly discussed sources of ESC voting affinity [7]. Within each taxonomy, countries are assigned to exactly one cluster. For every taxonomy, support is computed the same way. We identify the winner’s corresponding cluster, consider only the countries within that cluster that were eligible to vote that year, compute the average number of points they awarded the winner, and assign the corresponding Boolean support attribute whenever this average reaches at least eight points. This threshold follows naturally from ESC’s scoring system. Countries award points in a regular sequence from 1 to 8, then jump directly to 10 and 12 for their most favoured entries. An average of eight therefore sits at the very top of the ordinary scoring range, just before that jump, marking a natural boundary between routine support and the disproportionately generous scores a cluster reserves for its clear favourites.

Regional support

Countries are grouped according to geographical proximity:

 

Cluster Members
British Isles United Kingdom, Wales, Ireland
Scandinavia Denmark, Finland, Iceland, Norway, Sweden
Baltic States Estonia, Latvia, Lithuania
Benelux Belgium, Netherlands, Luxembourg
Iberian Peninsula Andorra, Spain, France, Portugal
Central Europe Austria, Switzerland, Czechia, Germany, Hungary, Poland, Slovakia
Mediterranean Italy, Monaco, Malta, San Marino
Balkans Albania, Bosnia & Herzegovina, Cyprus, Greece, Croatia, Montenegro, North Macedonia, Serbia, Slovenia, Türkiye, Yugoslavia, Serbia & Montenegro
Eastern Europe Belarus, Bulgaria, Moldova, Romania, Russia, Ukraine
Caucasus Armenia, Azerbaijan, Georgia
Non-European Australia, Israel, Kazakhstan, Morocco

Cultural support

Countries are grouped by linguistic and cultural similarity:

 

Cluster Members
Anglophone Australia, United Kingdom, Wales, Ireland
Nordic Denmark, Finland, Iceland, Norway, Sweden
Baltic Estonia, Latvia, Lithuania
Germanic Austria, Belgium, Switzerland, Germany, Luxembourg, Netherlands
Romance Andorra, France, Italy, Monaco, Moldova, Malta, Portugal, Romania, San Marino, Spain
East-Central Europe Czechia, Hungary, Poland, Slovakia, Slovenia, Croatia
East Slavic Belarus, Russia, Ukraine
Balkan Albania, Bosnia & Herzegovina, Bulgaria, Montenegro, North Macedonia, Serbia, Yugoslavia, Serbia & Montenegro
Hellenic Cyprus, Greece
Turkic Azerbaijan, Kazakhstan, Türkiye
Caucasian Armenia, Georgia
Semitic Israel, Morocco

Historical support

Historical support reflects historical ties and shared past, particularly the groupings shaped by the Cold War and the breakup of Yugoslavia:

 

Cluster Members
Former Soviet Union Armenia, Azerbaijan, Belarus, Estonia, Georgia, Kazakhstan, Latvia, Lithuania, Moldova, Russia, Ukraine
Former Yugoslavia Bosnia & Herzegovina, Croatia, Montenegro, North Macedonia, Serbia, Slovenia, Yugoslavia, Serbia & Montenegro
Former Eastern Bloc Albania, Bulgaria, Czechia, Hungary, Poland, Romania, Slovakia
Western Bloc Australia, Belgium, Denmark, France, Germany, Greece, Iceland, Israel, Italy, Luxembourg, Netherlands, Norway, Portugal, Spain, Türkiye, United Kingdom, Wales
Neutral Andorra, Austria, Switzerland, Finland, Ireland, Monaco, San Marino, Sweden
Non-Aligned Movement Cyprus, Malta, Morocco

Political support

Political support reflects political and economic alliances, grouping countries according to their present-day affiliations:

 

Cluster Members
EU Eurozone Austria, Belgium, Bulgaria, Croatia, Cyprus, Estonia, Finland, France, Germany, Greece, Ireland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Portugal, Slovakia, Slovenia, Spain
EU Non-Eurozone Czechia, Denmark, Hungary, Poland, Romania, Sweden
EU Candidates Albania, Bosnia & Herzegovina, Georgia, Moldova, Montenegro, North Macedonia, Serbia, Türkiye, Ukraine
EFTA / EEA Switzerland, Iceland, Norway
Post-Brexit United Kingdom, Wales
Eurasian Economic Union Armenia, Belarus, Kazakhstan, Russia
Non-aligned Andorra, Azerbaijan, Monaco, San Marino
Non-European Australia, Israel, Morocco
Defunct States Yugoslavia, Serbia & Montenegro

The inner scale: musical characteristics

The inner scale describes two musical properties of each winning song. Tempo is transformed using an ordinal threshold scale with thresholds at 100 BPM and 150 BPM, yielding the attributes tempo ≥ 100 BPM and tempo ≥ 150 BPM. Songs below 100 BPM satisfy neither threshold, songs between 100 and 149 BPM satisfy only the first threshold, and songs with a tempo of at least 150 BPM satisfy both attributes. These thresholds follow previous work on the perception of musical tempo [4]. Musical key is represented using a dichotomic scale with the mutually exclusive attributes major and minor.

A sample of the dataset

The resulting many-valued context contains one object for each ESC winner. Throughout this post, countries are identified by both their full name and the corresponding two-letter country code. In the interactive nested line diagram, objects are labelled using the country code together with the winning year. A small sample of the dataset is shown below:

Year Country Regional Cultural Historical Political BPM Key
1975 Netherlands (NL) 139 Major
1976 United Kingdom (GB) × 97 Major
1977 France (FR) × 125 Minor
… … … … … … … …
2024 Switzerland (CH) × × × × 160 Minor
2025 Austria (AT) × × × 133 Minor

 

» Click here to view the full table of the many-valued context (all 50 winners) «
Year Country Regional Cultural Historical Political BPM Key
1975 Netherlands (NL) 139 Major
1976 United Kingdom (GB) × 97 Major
1977 France (FR) × 125 Minor
1978 Israel (IL) × 145 Minor
1979 Israel (IL) 141 Major
1980 Ireland (IE) × × × × 97 Major
1981 United Kingdom (GB) × × 178 Major
1982 Germany (DE) × × 118 Minor
1983 Luxembourg (LU) × 142 Minor
1984 Sweden (SE) × × × × 131 Major
1985 Norway (NO) × × 148 Major
1986 Belgium (BE) × × × 139 Major
1987 Ireland (IE) × × × × 151 Major
1988 Switzerland (CH) 144 Major
1989 Yugoslavia (YU) 147 Major
1990 Italy (IT) × × 102 Major
1991 Sweden (SE) × × × 93 Major
1992 Ireland (IE) × × × 78 Major
1993 Ireland (IE) × × × 139 Major
1994 Ireland (IE) × × × × 124 Major
1995 Norway (NO) × 81 Minor
1996 Ireland (IE) × 125 Major
1997 United Kingdom (GB) × × × 166 Major
1998 Israel (IL) × 134 Minor
1999 Sweden (SE) × × × 144 Major
2000 Denmark (DK) × × × 104 Major
2001 Estonia (EE) × × × × 124 Major
2002 Latvia (LV) × × × × 144 Minor
2003 Türkiye (TR) × × 95 Major
2004 Ukraine (UA) × × × 172 Major
2005 Greece (GR) × × 113 Minor
2006 Finland (FI) × × × × 123 Minor
2007 Serbia (RS) × × 152 Major
2008 Russia (RU) × × × × 133 Major
2009 Norway (NO) × × × × 108 Minor
2010 Germany (DE) × × 95 Major
2011 Azerbaijan (AZ) × × 86 Major
2012 Sweden (SE) × × × × 132 Major
2013 Denmark (DK) × × × × 111 Minor
2014 Austria (AT) × × × 164 Minor
2015 Sweden (SE) × × × × 124 Major
2016 Ukraine (UA) × × × 120 Minor
2017 Portugal (PT) × × × × 172 Major
2018 Israel (IL) × × 130 Minor
2019 Netherlands (NL) × × 143 Major
2021 Italy (IT) × × × 103 Minor
2022 Ukraine (UA) × × × 105 Minor
2023 Sweden (SE) × × × × 150 Minor
2024 Switzerland (CH) × × × × 160 Minor
2025 Austria (AT) × × × 133 Minor

 

» Click here to view the full table of the scaled dataset (all 50 winners) «
Year Country Regional Cultural Historical Political ≥100 BPM ≥150 BPM Major Minor
1975 Netherlands (NL) × ×
1976 United Kingdom (GB) × ×
1977 France (FR) × × ×
1978 Israel (IL) × × ×
1979 Israel (IL) × ×
1980 Ireland (IE) × × × × ×
1981 United Kingdom (GB) × × × × ×
1982 Germany (DE) × × × ×
1983 Luxembourg (LU) × × ×
1984 Sweden (SE) × × × × × ×
1985 Norway (NO) × × × ×
1986 Belgium (BE) × × × × ×
1987 Ireland (IE) × × × × × × ×
1988 Switzerland (CH) × ×
1989 Yugoslavia (YU) × ×
1990 Italy (IT) × × × ×
1991 Sweden (SE) × × × ×
1992 Ireland (IE) × × × ×
1993 Ireland (IE) × × × × ×
1994 Ireland (IE) × × × × × ×
1995 Norway (NO) × ×
1996 Ireland (IE) × × ×
1997 United Kingdom (GB) × × × × × ×
1998 Israel (IL) × × ×
1999 Sweden (SE) × × × × ×
2000 Denmark (DK) × × × × ×
2001 Estonia (EE) × × × × × ×
2002 Latvia (LV) × × × × × ×
2003 Türkiye (TR) × × ×
2004 Ukraine (UA) × × × × × ×
2005 Greece (GR) × × × ×
2006 Finland (FI) × × × × × ×
2007 Serbia (RS) × × × × ×
2008 Russia (RU) × × × × × ×
2009 Norway (NO) × × × × × ×
2010 Germany (DE) × × ×
2011 Azerbaijan (AZ) × × ×
2012 Sweden (SE) × × × × × ×
2013 Denmark (DK) × × × × × ×
2014 Austria (AT) × × × × × ×
2015 Sweden (SE) × × × × × ×
2016 Ukraine (UA) × × × × ×
2017 Portugal (PT) × × × × × × ×
2018 Israel (IL) × × × ×
2019 Netherlands (NL) × × × ×
2021 Italy (IT) × × × × ×
2022 Ukraine (UA) × × × × ×
2023 Sweden (SE) × × × × × × ×
2024 Switzerland (CH) × × × × × × ×
2025 Austria (AT) × × × × ×

 

» Click here to view the full table of the outer formal context (all 50 winners) «
Year Country Regional Cultural Historical Political
1975 Netherlands (NL)
1976 United Kingdom (GB) ×
1977 France (FR) ×
1978 Israel (IL) ×
1979 Israel (IL)
1980 Ireland (IE) × × × ×
1981 United Kingdom (GB) × ×
1982 Germany (DE) × ×
1983 Luxembourg (LU) ×
1984 Sweden (SE) × × × ×
1985 Norway (NO) × ×
1986 Belgium (BE) × × ×
1987 Ireland (IE) × × × ×
1988 Switzerland (CH)
1989 Yugoslavia (YU)
1990 Italy (IT) × ×
1991 Sweden (SE) × × ×
1992 Ireland (IE) × × ×
1993 Ireland (IE) × × ×
1994 Ireland (IE) × × × ×
1995 Norway (NO) ×
1996 Ireland (IE) ×
1997 United Kingdom (GB) × × ×
1998 Israel (IL) ×
1999 Sweden (SE) × × ×
2000 Denmark (DK) × × ×
2001 Estonia (EE) × × × ×
2002 Latvia (LV) × × × ×
2003 Türkiye (TR) × ×
2004 Ukraine (UA) × × ×
2005 Greece (GR) × ×
2006 Finland (FI) × × × ×
2007 Serbia (RS) × ×
2008 Russia (RU) × × × ×
2009 Norway (NO) × × × ×
2010 Germany (DE) × ×
2011 Azerbaijan (AZ) × ×
2012 Sweden (SE) × × × ×
2013 Denmark (DK) × × × ×
2014 Austria (AT) × × ×
2015 Sweden (SE) × × × ×
2016 Ukraine (UA) × × ×
2017 Portugal (PT) × × × ×
2018 Israel (IL) × ×
2019 Netherlands (NL) × ×
2021 Italy (IT) × × ×
2022 Ukraine (UA) × × ×
2023 Sweden (SE) × × × ×
2024 Switzerland (CH) × × × ×
2025 Austria (AT) × × ×

 

» Click here to view the full table of the inner formal context (all 50 winners) «
Year Country ≥100 BPM ≥150 BPM Major Minor
1975 Netherlands (NL) × ×
1976 United Kingdom (GB) ×
1977 France (FR) × ×
1978 Israel (IL) × ×
1979 Israel (IL) × ×
1980 Ireland (IE) ×
1981 United Kingdom (GB) × × ×
1982 Germany (DE) × ×
1983 Luxembourg (LU) × ×
1984 Sweden (SE) × ×
1985 Norway (NO) × ×
1986 Belgium (BE) × ×
1987 Ireland (IE) × × ×
1988 Switzerland (CH) × ×
1989 Yugoslavia (YU) × ×
1990 Italy (IT) × ×
1991 Sweden (SE) ×
1992 Ireland (IE) ×
1993 Ireland (IE) × ×
1994 Ireland (IE) × ×
1995 Norway (NO) ×
1996 Ireland (IE) × ×
1997 United Kingdom (GB) × × ×
1998 Israel (IL) × ×
1999 Sweden (SE) × ×
2000 Denmark (DK) × ×
2001 Estonia (EE) × ×
2002 Latvia (LV) × ×
2003 Türkiye (TR) ×
2004 Ukraine (UA) × × ×
2005 Greece (GR) × ×
2006 Finland (FI) × ×
2007 Serbia (RS) × × ×
2008 Russia (RU) × ×
2009 Norway (NO) × ×
2010 Germany (DE) ×
2011 Azerbaijan (AZ) ×
2012 Sweden (SE) × ×
2013 Denmark (DK) × ×
2014 Austria (AT) × × ×
2015 Sweden (SE) × ×
2016 Ukraine (UA) × ×
2017 Portugal (PT) × × ×
2018 Israel (IL) × ×
2019 Netherlands (NL) × ×
2021 Italy (IT) × ×
2022 Ukraine (UA) × ×
2023 Sweden (SE) × × ×
2024 Switzerland (CH) × × ×
2025 Austria (AT) × ×

 

Across all 50 winners, 33 received regional support, 34 cultural support, 32 historical support, and 29 political support. The musical attributes consist of 31 songs in major keys and 19 in minor keys. Based on the selected tempo thresholds, the dataset contains 8 slow songs (below 100 BPM), 33 medium-tempo songs (100–149 BPM), and 9 fast songs (150 BPM or above). With the dataset defined, we can now construct the corresponding nested line diagram and explore the relationships it reveals.

Interactive Nested Line Diagram

The visualization can be explored directly: select a node to inspect its objects and attributes, hover over nodes to emphasize their connections, and open an outer node to examine its inner lattice in more detail.

The outer lattice

The large structure forms the outer lattice, representing the four types of voting support: regional, cultural, historical, and political. The top concept contains all 50 winners, without requiring any particular type of support. Moving downward introduces increasingly specific combinations of support attributes, until we reach the bottom concept, containing the 15 winners who received support from all four taxonomies.

The inner lattice

Each outer concept contains a copy of the same inner lattice, representing tempo and key. This inner lattice consists of ten concepts derived from the BPM thresholds and the distinction between major and minor keys. Its layout stays identical inside every outer node; only the filled nodes change. This makes it possible to compare musical patterns across different voting-support concepts simply by looking at the same position in each inner lattice. A filled inner node indicates that, together with the surrounding outer concept, it corresponds to a concept of the complete context. A hollow node indicates that this particular combination of outer and inner concepts doesn’t occur.

Implications

Every hollow node is potentially an implication. Here’s how to read one:

  1. Find the hollow node you are curious about.
  2. Look for the largest filled node directly below it, first inside the same inner lattice, and if there’s no candidate there, in a smaller outer group (one with a stricter combination of voting-support flags).
  3. Whatever extra attributes that filled node carries, beyond those already given by the hollow node’s own position, form the conclusion of an implication whose premise is the hollow node’s position.

Try this directly in the diagram above before reading on: the implications described in the next section can all be located this way.

What Can We Learn?

For the combined ESC winner context, the Duquenne-Guigues basis, the smallest set of implications from which every other true implication in the context can be derived, consists of eight implications. Some arise from the structure of the conceptual scales themselves. For example, every song with a tempo of at least 150 BPM also satisfies the attribute BPM ≥ 100, and every song is either in a major or minor key. The remaining implications reveal relationships between voting support and musical characteristics observed in the dataset.

Implication 1: Fast winners receive cultural support

BPM ≥ 150 → Cultural support

The first implication states that every winning song with a tempo of at least 150 BPM also received cultural support. This applies to nine winners spanning more than four decades: 1981 (United Kingdom), 1987 (Ireland), 1997 (United Kingdom), 2004 (Ukraine), 2007 (Serbia), 2014 (Austria), 2017 (Portugal), 2023 (Sweden), and 2024 (Switzerland).

Although these winners represent a wide range of musical styles, none violates this rule. Whether this reflects a broader characteristic of ESC or simply the composition of the winner dataset would require a larger study including non-winning entries.

Implications 2–4: Minor-key songs with voting support are never slow

Regional support ∧ Minor key → BPM ≥ 100

Cultural support ∧ Minor key → BPM ≥ 100

Historical support ∧ Minor key → BPM ≥ 100

These three implications share the same structure. Together they show that whenever a minor-key winner received regional, cultural, or historical support, the song was never slow. In other words, no winner in the dataset combines a minor key, a tempo below 100 BPM, and one of these three forms of voting support.

  • Regional support: 2002 (Latvia), 2005 (Greece), 2006 (Finland), 2009 (Norway), 2013 (Denmark), 2016 (Ukraine), 2018 (Israel), 2021 (Italy), 2022 (Ukraine), 2023 (Sweden), 2024 (Switzerland)
  • Cultural support: 2002 (Latvia), 2005 (Greece), 2006 (Finland), 2009 (Norway), 2013 (Denmark), 2014 (Austria), 2016 (Ukraine), 2021 (Italy), 2023 (Sweden), 2024 (Switzerland), 2025 (Austria)
  • Historical support: 1978 (Israel), 1982 (Germany), 1998 (Israel), 2002 (Latvia), 2006 (Finland), 2009 (Norway), 2013 (Denmark), 2014 (Austria), 2016 (Ukraine), 2022 (Ukraine), 2023 (Sweden), 2024 (Switzerland), 2025 (Austria)

Implications 6–8: Relationships between voting support and musical characteristics

Political support ∧ Historical support ∧ Major → Regional support

Political support ∧ Cultural support ∧ BPM ≥ 150 → Historical support

Cultural support ∧ BPM ≥ 150 ∧ Minor → Political support ∧ Historical support

The remaining non-trivial implications involve relatively small groups of winners but illustrate another strength of nested line diagrams: relationships between musical characteristics and multiple notions of voting support become visible simultaneously. Some of these dependencies likely reflect overlap between the manually constructed voting taxonomies, while others arise from the limited size of the winner dataset.

  • Regional support: 1980 (Ireland), 1984 (Sweden), 1986 (Belgium), 1987 (Ireland), 1994 (Ireland), 2001 (Estonia), 2008 (Russia), 2012 (Sweden), 2015 (Sweden), 2017 (Portugal)
  • Historical support: 1987 (Ireland), 2014 (Austria), 2017 (Portugal), 2023 (Sweden), 2024 (Switzerland)
  • Political support, Historical support: 2014 (Austria), 2023 (Sweden), 2024 (Switzerland)

As before, each of these can be located directly in the diagram by comparing the corresponding nodes across different outer concepts.

Implication 5: A structural implication

Major ∧ Minor → Everything

The fifth implication does not describe ESC itself. Its premise is impossible because every song is either in a major or minor key. Such vacuous implications naturally appear in canonical implication bases and simply reflect the structure of the conceptual scales rather than properties of the underlying data.

 

» Click here to view the complete Duquenne-Guigues implication basis «
# Premise Conclusion Type Winners
1 BPM ≥ 150 Cultural support, BPM ≥ 100 Inner → Outer + Inner 9
2 Regional support ∧ Minor BPM ≥ 100 Outer + Inner → Inner 11
3 Cultural support ∧ Minor BPM ≥ 100 Outer + Inner → Inner 11
4 Historical support ∧ Minor BPM ≥ 100 Outer + Inner → Inner 13
5 Major ∧ Minor Political support, Regional support, Cultural support, Historical support, BPM ≥ 100, BPM ≥ 150 Vacuous 0
6 Political support ∧ Historical support ∧ Major Regional support Outer + Inner → Outer 10
7 Political support ∧ Cultural support ∧ BPM ≥ 150 Historical support Outer + Inner → Outer 5
8 Cultural support ∧ BPM ≥ 150 ∧ Minor Political support, Historical support Outer + Inner → Outer 3

How ConceptFlow Builds the Diagram

The nested line diagram shown above is generated automatically by ConceptFlow. Starting from the many-valued ESC winners dataset, the library transforms the data into two concept lattices, computes the filled nodes of the nested diagram, lays out the lattices using DimFlux, and finally generates a self-contained interactive visualization.

Many-valued context
    ↓
Conceptual scaling
    ↓
Outer and inner formal contexts
    ↓
Concept lattices
    ↓
Filled-node computation
    ↓
DimFlux layout
    ↓
JSON representation
    ↓
Interactive D3 visualization

Step 1: Conceptual scaling

The ESC winners dataset contains ordinary tabular data such as Boolean values, numerical BPM values, and musical keys. Before FCA can be applied, these values must be transformed into binary attributes through conceptual scaling. For this example, the four voting-support attributes are generated using general scales, tempo is transformed using a threshold scale with breakpoints at 100 and 150 BPM, and key is represented using a dichotomic scale producing the mutually exclusive attributes major and minor. Applying these scales produces two formal contexts: an outer context describing voting support, and an inner context describing musical characteristics.

Step 2: Constructing the factor lattices

The outer and inner formal contexts are processed independently to construct their corresponding concept lattices. Since both contexts share the same set of ESC winners and use disjoint sets of attributes, they satisfy the assumptions required for nested line diagrams. ConceptFlow explicitly verifies this disjointness before constructing the diagram, since the filled-node computation described below is only valid for a genuine apposition.

Step 3: Computing the filled nodes

Rather than constructing the concept lattice of the combined context explicitly, ConceptFlow computes the filled nodes directly from the two factor lattices. For every winner, the corresponding object concepts are identified in both lattices, producing the initial set of coordinate pairs. These pairs are then closed under componentwise joins until no further pairs can be generated. By the subdirect product theorem, the resulting set is exactly the image of the combined concept lattice inside the product of the two factor lattices.

Step 4: Computing the layout

Once the two lattices have been constructed, ConceptFlow computes their layouts using DimFlux [5], which generates doubly-additive line diagrams optimized for readability. The outer lattice is laid out once, and the inner lattice is likewise laid out only once. The same inner layout is then reused inside every outer concept. Because every copy shares identical coordinates, differences between outer concepts are expressed solely through the filled nodes, making comparisons considerably easier.

Step 5: Interactive visualization

Finally, ConceptFlow exports the nested diagram as a JSON representation, rendered using D3.js [1]. The resulting HTML page supports panning, zooming, concept inspection, and navigation between nested views, all while remaining entirely self-contained.

Hand-Drawn Version: Graph Drawing Contest Poster

The same nested line diagram also appears in a poster submitted to the 2026 Graph Drawing Contest, alongside a short introduction to FCA and nested line diagrams for readers encountering the layout for the first time. Unlike the interactive version above, which ConceptFlow lays out automatically via DimFlux, the poster’s diagram was drawn by hand, which let us tighten the layout beyond what the automatic algorithm currently produces.

The Rhythm of the European Vote poster, submitted to the 2026 Graph Drawing Contest
Hand-drawn poster version of the nested line diagram, submitted to the 2026 Graph Drawing Contest.

The poster highlights one node and leaves the reader to work out what it implies. The solution to the question about the highlighted node is: {regional support, major key, BPM ≥ 150} ⇒ {cultural support}. In other words, every winner in the diagram that received regional support, was in a major key, and had a tempo of at least 150 BPM also received cultural support.

Since the tempo scale is ordinal, every song with BPM ≥ 150 also satisfies BPM ≥ 100. Consequently, the implication also remains valid if BPM ≥ 100 is included in the premise. However, the Duquenne–Guigues (canonical) basis represents implications using minimal premises, so the redundant attribute BPM ≥ 100 is omitted.

Limitations

The ESC winners example is intended to demonstrate how ConceptFlow and nested line diagrams can be used to explore relationships across multiple conceptual scales. The implications discussed above are exact properties of the constructed context, but they should not be interpreted as general laws of ESC voting. Several choices shape the resulting diagram:

  • The voting taxonomies were constructed manually. The regional, cultural, historical, and political clusters reflect commonly discussed groupings, but they were not learned from the voting data. Different groupings could change the support attributes assigned to individual winners.
  • The taxonomies overlap conceptually. Geographical proximity, cultural similarity, historical relationships, and political alignment are often closely related. Some implications may therefore reflect dependencies between the taxonomies themselves rather than a direct relationship between voting patterns and musical characteristics.
  • The dataset contains winners only. Restricting the analysis to 50 winning entries keeps the diagram readable and provides a focused demonstration, but the results do not describe the full population of ESC songs or voting behaviour.
  • The thresholds are modelling choices. The eight-point threshold for voting support and the BPM breakpoints at 100 and 150 determine how the original data is transformed into binary attributes. Changing these values could alter the structure of the lattice and the implications derived from it.
  • Tempo values can be ambiguous. Some songs may reasonably be interpreted at half or double the reported BPM, particularly when their rhythmic structure supports more than one perceived pulse.
  • The implications are descriptive rather than statistical. The Duquenne-Guigues basis captures every implication that holds in this particular formal context, but no significance testing or generalization beyond the dataset was performed.

These limitations do not reduce the value of the visualization as an exploratory tool. Instead, they emphasize an important feature of conceptual scaling: the structure of a formal context depends not only on the data, but also on the modelling decisions used to represent it.

Future Work

The ESC winners example demonstrates only a small part of what ConceptFlow can support. Several extensions are planned for future releases.

  • Implication theory integrated into the visualization. The most natural next step is to make implications directly accessible from the nested line diagram. Rather than computing the Duquenne-Guigues basis separately, users will be able to select a hollow node and immediately inspect the implication responsible for it, turning the visualization into an interactive tool for knowledge discovery.
  • Additional conceptual scales. While this example uses general, threshold, and dichotomic scales, ConceptFlow also provides nominal, contranominal, ordinal, and interordinal scales. Future examples will demonstrate how these can be combined to analyse richer datasets.
  • Improved interactive exploration. Planned features include search and filtering, enhanced navigation, support for multiple levels of nesting, and alternative visualization modes for different exploration tasks.
  • Broader applications. Although the ESC provides an intuitive case study, the workflow presented here is entirely domain-independent. Any many-valued dataset can be transformed by conceptual scaling and explored using nested line diagrams.
  • Additional FCA visualizations. The infrastructure developed for nested line diagrams also provides a foundation for other interactive FCA visualizations, such as conceptual exploration interfaces, implication browsers, and publication-quality diagram generation.

Conclusion

In this post, we introduced ConceptFlow and demonstrated its nested line diagram functionality using 50 years of ESC winners. By combining voting patterns and musical characteristics into two conceptual scales, the resulting visualization makes it possible to explore their relationships while preserving the structure of each scale independently. The implications derived from the combined context further illustrate how nested line diagrams can support knowledge discovery beyond what traditional visualizations typically reveal.

If you would like to explore the example further, interact with the nested line diagram above and try identifying implications directly from the visualization. The complete source code for ConceptFlow, together with the implementation of the examples presented in this post, is available on GitHub:

https://github.com/anuragxorma/conceptflow

References

[1] Bostock, M., Ogievetsky, V., & Heer, J. (2011). D3: Data-Driven Documents. IEEE Transactions on Visualization and Computer Graphics, 17(12), 2301–2309. https://doi.org/10.1109/TVCG.2011.185

[2] Ganter, B., & Wille, R. (2024). Formal Concept Analysis: Mathematical Foundations (2nd ed.). Springer.

[3] Gatherer, D. (2006). Comparison of ESC Simulation with Actual Results Reveals Shifting Patterns of Collusive Voting Alliances. Journal of Artificial Societies and Social Simulation, 9(2), Article 1. https://www.jasss.org/9/2/1.html

[4] Madison, G., & Paulin, J. (2010). Ratings of Speed in Real Music as a Function of Both Original and Manipulated Beat Tempo. The Journal of the Acoustical Society of America, 128(5), 3032–3040. https://doi.org/10.1121/1.3493462

[5] Nöhre, M., Dürrschnabel, D., Ganter, B., & Stumme, G. (2026). DimFlux: Force-Directed Additive Line Diagrams. International Journal of Approximate Reasoning, 197, 109734. https://doi.org/10.1016/j.ijar.2026.109734

[6] Sharma, A. (2026). ConceptFlow: A Scikit-Learn-Compatible Python Library for Formal Concept Analysis. GitHub repository. https://github.com/anuragxorma/conceptflow

[7] Yair, G. (1995). „Unite Unite Europe“: The Political and Cultural Structures of Europe as Reflected in the Eurovision Song Contest. Social Networks, 17(2), 147–161. https://doi.org/10.1016/0378-8733(95)00253-K