A bump chart is useful to see how value of a particular dimension changes with respect to other dimension over time. It more effective when the value being tracked or compared is Rank.

A bump chart is usually like a line chart, but when there are too many crossing its not so appealing. Hence the interest in curved Bump Chart. I have created the bump chart based on the works of  Rody Zachovich.(Difference is I used data densification method. )Check his blog here.

Lets Begin:

Import the data to Tableau public. Union the data with itself. –This is to create two distinct values for Path and create data densification. I referred to  article  by Toan Hoang for this.

• Create a calculated field Path

IF [Table Name]=’Sheet1′

THEN 1

ELSE 49

END

• Create Path (bin) with step size of 1 .   –This will give us 49 points so that we can draw our curve along those points
• Create calculated field [Index]

index()

• Create calculated field T and Sigmoid

[T]

([Index]-25)/4       –Index is calculated along Path (bin).Hence value of T will be from -6 to 6

[Sigmoid]

1/(1+EXP(-[T]))

Lets plot and see our progress

• Drag [Path (bin)] to rows. Check the show missing value option. Drag [Path (bin )] to Detail.
• Drag [T] to columns and [Sigmoid] to rows. Right click and set compute using to Path (bin) for [T] and [Path (bin)].

We have 49 points plotted against [T].

• Replace [T] with  [Index].

Drag [Year] to column and make it discreet.

For each [Year], we have [Index] and a sigmoid curve. Great..

• Change the Marks from Automatic to Line.

Add the  Rank for each [city]to the sigmoid curve.

• Create calculated field [Rank1]

WINDOW_MAX(MAX([Rank]))

• Create calculated field [Curve]

[Rank1]+[Sigmoid]

• Replace[Sigmoid] in Rows with [Curve].In Nested calculation, make sure that compute using is set to Path (bin).

Drag [City] to detail.

We have the Rank for each City in a Year. Now all the curve are just going upward. We need the curve to end where the next Rank for the City starts.

So for a City we need to get the Rank in the consecutive Year.

• Create [Rank 2 Setup]

IF ([Index] = 49 and LOOKUP(min([Year]),1)=min([Year])+1)

THEN LOOKUP([Rank1],1)

END

–if index is 49 and the next [Year] in the row is the consecutive Year, We lookup the next Rank.

Lets check the Tabular data to see what is happening here. For [Rank 2 Setup] set compute using to [Year],[Path (bin)].

When Index is 49,  [Rank 2 Setup] has the value of next Rank.

• Populate this for all the above rows by creating [Rank2]

IF(ISNULL(WINDOW_MAX([Rank 2 Setup])))

THEN [Rank1]

ELSE

WINDOW_MAX([Rank 2 Setup])

END

For [Rank2] set compute using to [Path (bin)].

• Modify [Curve] to

[Rank1]+([Rank2]-[Rank1])*[Sigmoid]

• Check each of the nested calculation and Set Compute Using as specified above.
• Edit the [Curve] axis and reverse the Scale.

Now for the Circle on the chart

• Create [Rank_DualAxis]

IF [Path]=1

THEN [Rank]

END

• Drag [Rank_DualAxis] to Rows. Make it Dual axis. Synchronize the axis. Adjust the mark size.

There is a gap between the line and circle. Edit the axis for [Index] to fix this.

Hide the headers and after some formatting , the final result.