ഇvana sajan pallivathukkal
the streamgraph of villain archetypes from the 1930s to the 2020s

data visualization · self-initiated

a century of villains

an interactive streamgraph tracing how the hindi-cinema villain changed shape across ninety years.

role
design + build
context
self-initiated · data storytelling
year
2026

about

the bollywood villain is usually argued about one film at a time. this takes the long view: not who the villains were, but what kind of threat each decade cast as the enemy.

495 films hand-sampled across ten decades, each villain tagged by archetype and by whether the threat was personal or systemic.

credits

research, sampling, tagging, design, build
evana sajan
stack
react · typescript · d3
sample
495 films, ten decades
status
live

tap a colour in the legend to isolate one archetype across the whole century. hover a decade to get its two voices, the analytical line and the first-person one.

the live piece. ten decade columns, thirteen archetypes, and the sampling caveat kept in view under the chart.
the streamgraph at phone width, with the decade axis and the thirteen-archetype legend

product thesis

a villain is a mirror. i wanted to see what ninety years of hindi cinema had been afraid of, and whether the fear had a shape. it does: the enemy stops being a man and becomes a nation, a policy, a system.

why this one is different

every other version of this argument is an essay about films you have seen.

this one puts a number on it, then spends most of its design budget admitting how soft the number is.

for the first time, the 2020s tip systemic.

the systems thinking

sample

495 films across ten decades, hand-sampled rather than scraped, because there is no clean dataset of who the villain was.

tag

each villain gets an archetype out of thirteen, and a second axis: was the threat a person, or a system.

weight

column width is how many films a decade actually made, not how many i sampled. the chart is weighted by the industry, not by my reading list.

draw

band height is each archetype's share of its own decade, so a decade that made forty films and one that made four hundred can still be read against each other.

key design decisions

01

encode the doubt into the chart itself

why

a streamgraph is a persuasive shape. left alone it makes a thinly-sourced decade look exactly as settled as a well-covered one.

tradeoff

the piece is less striking than it could be, and it interrupts its own argument to say how little it knows.

result

column width is tied to real output, sparse decades wear a warning glyph, and the caveat sits under the chart rather than in a footnote. most of the design was arguing with the chart about this.

02

let colour carry the thesis

why

the whole finding is a drift from intimate evil to systemic evil, and a legend nobody reads cannot carry that.

tradeoff

thirteen archetypes is a lot of hues to keep legible on black, so the constraint set the palette rather than the other way round.

result

warm reds and ambers for personal crimes, cool blues and teals for systemic ones. the palette moves warm to cool as the century turns, so you see the argument before you read it.

03

give every decade two voices

why

a chart states a fact. it rarely makes you feel one, and this subject is half mood.

tradeoff

twice the copy to write, and twice the copy to keep honest.

result

each decade pairs a clipped analytical line with a first-person literary one, so the number and the mood arrive in the same hover.

edge cases accounted for

a decade with almost nothing in it

the 1930s and 1940s are the thinnest samples in the set. they keep their real column width and wear the warning glyph, so they cannot quietly pass as evidence.

thirteen hues on near-black

adjacent bands that read as one colour would invent a trend. the palette was built for separation at small band heights first and for prettiness second.

a phone in portrait

a ninety-year x-axis does not fit a handset. at phone width the piece keeps the legend as the control and lets the chart scroll, rather than squeezing ten decades into 375px and making all of them illegible.

an archetype that barely exists

colonial oppressor is most of two decades and almost none of the rest. isolating one archetype from the legend is the only way to see a band that thin, which is why the legend is interactive rather than a key.