# Waterfall

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 <a href="#the-method-to-use" id="the-method-to-use"></a>

The method is `s.plt.line_and_bar_charts()`

It must contain the following input variables:

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

And accepts the following input variables as optional:

```python
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:

```python
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.

## Examples <a href="#examples" id="examples"></a>

Both examples use this dataset:

```python
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:

```python
s.plt.waterfall(
    data=data, order=0, x='x',
    positive='income',
    negative='expenses',
)
```

<figure><img src="https://3782181538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUlHTfmIZY46Z1EDfyGMz%2Fuploads%2FeIgaixzE0IxifTPorRgF%2FWaterfall.png?alt=media&#x26;token=5c6b78b2-0ec5-4bee-9eb1-4d76790c319a" alt=""><figcaption></figcaption></figure>

The second example uses the balance:

```python
s.plt.waterfall(
    data=data, order=0, x='x',
    title='Waterfall with balance',
    positive='income',
    negative='expenses',
    show_balance=True
)
```

<figure><img src="https://3782181538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUlHTfmIZY46Z1EDfyGMz%2Fuploads%2FKrqPX4IEKTFXEWeBXDCU%2FWaterfall%20with%20balance.png?alt=media&#x26;token=9839385a-7727-42e7-861b-107d81b3973a" alt=""><figcaption></figcaption></figure>

## Variants

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

{% tabs %}
{% tab title="Clean" %}

<figure><img src="https://3782181538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUlHTfmIZY46Z1EDfyGMz%2Fuploads%2F10NINYbuYGtilknWImk2%2Fimatge.png?alt=media&#x26;token=257e08b3-9f8f-4dcf-b0e3-06489e0a5747" alt=""><figcaption><p>variant="clean"</p></figcaption></figure>
{% endtab %}

{% tab title="Minimal" %}

<figure><img src="https://3782181538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUlHTfmIZY46Z1EDfyGMz%2Fuploads%2FcejoN5yU4C8pXf5K9kPD%2Fimatge.png?alt=media&#x26;token=f94e4216-dbae-490f-aabf-8725d783fd32" alt=""><figcaption><p>variant="minimal"</p></figcaption></figure>
{% endtab %}
{% endtabs %}
