The Waterfall chart provides a visual representation of sequential data points, demonstrating the cumulative effect of sequentially occurring positive and negative values. It effectively showcases the step-by-step journey of a value, helping to highlight the major contributions or subtractions along the way. The visualization aids in understanding and analyzing the sequence of events or factors leading to a particular end value.

The Method To Use

The method is s.plt.line_and_bar_charts()

It must contain the following input variables:

data: Union[str, DataFrame, List[Dict]]
order: int
x: str
positive: str
negative: str

And accepts the following input variables as optional:

rows_size: Optional[int] = None
cols_size: Optional[int] = None
padding: Optional[str] = None
title: Optional[str] = None
x_axis_name: Optional[str] = None
y_axis_name: Optional[str] = None
show_balance: bool = False
option_modifications: Optional[Dict] = None,
variant: Optional[str] = None

To generate a Waterfall Chart, your input should be structured as a list of dictionaries. Each dictionary represents a specific date and its corresponding income and expenses.

Here's the format:

data = [
    {'x': '<Date>', 'income': <Income Value>, 'expenses': <Expense Value>},

Key Components:

  1. 'x': Represents the date or any sequential point you want to plot. It should be in string format.

  2. 'income': Represents the income for the corresponding date. It should be a positive numeric value. If there's no income for a specific date, input 0.

  3. 'expenses': Represents the expenses for the corresponding date. It should be a positive numeric value, even though it's an expense. If there are no expenses for a specific date, input 0.

Once the input is structured in this format, it can be used to generate a Waterfall Chart that visually captures the sequential changes in profit or loss.


Both examples use this dataset:

data = [
    {'x': 'Nov 1', 'income': 900, 'expenses': 0},
    {'x': 'Nov 2', 'income': 345, 'expenses': 0},
    {'x': 'Nov 3', 'income': 393, 'expenses': 0},
    {'x': 'Nov 4', 'income': 0, 'expenses': 108},
    {'x': 'Nov 5', 'income': 0, 'expenses': 154},
    {'x': 'Nov 6', 'income': 135, 'expenses': 0},
    {'x': 'Nov 7', 'income': 178, 'expenses': 0},
    {'x': 'Nov 8', 'income': 286, 'expenses': 0},
    {'x': 'Nov 9', 'income': 0, 'expenses': 119},
    {'x': 'Nov 10', 'income': 0, 'expenses': 361},
    {'x': 'Nov 11', 'income': 0, 'expenses': 203},
    {'x': 'Nov 12', 'income': 450, 'expenses': 156},
    {'x': 'Nov 13', 'income': 45, 'expenses': 189},
    {'x': 'Nov 14', 'income': 0, 'expenses': 0},
    {'x': 'Nov 15', 'income': 122, 'expenses': 87},
    {'x': 'Nov 16', 'income': 65, 'expenses': 156},
    {'x': 'Nov 17', 'income': 336, 'expenses': 450},
    {'x': 'Nov 18', 'income': 560, 'expenses': 400},
    {'x': 'Nov 19', 'income': 1200, 'expenses': 1130},
    {'x': 'Nov 20', 'income': 3200, 'expenses': 3130},

The first example uses the basic configuration:

    data=data, order=0, x='x',

The second example uses the balance:

    data=data, order=0, x='x',
    title='Waterfall with balance',


By setting the parameter variant to the following values the appearance of the chart can be changed:

Last updated