# How to Plot Waterfall Plot in Matplotlib

Salman Mehmood Feb 02, 2024

This tutorial will tackle how you can create a waterfall plot or chart in Python. We will use the Matplotlib and waterfall_chart library for two dimensions and three-dimension waterfall plots.

## Create 2D Waterfall Plot With Matplotlib in Python

The waterfall chart is common in finance, but the waterfall is not so effective when you have part-to-whole relationships.

Let’s say you want to show our project cost breakdown. How it looks like in a table takes a bit of time for people to go through the table and compare the numbers.

Take note that the waterfall charts do not come with Python default packages. First, we need to install the `waterfallcharts` package.

``````pip install waterfallcharts
``````

If you get any error during installation, upgrade your `pip` using the following command.

``````python -m pip install --upgrade pip
``````

We need to import the required libraries to create a waterfall chart or plot.

``````import matplotlib.pyplot as plot
import waterfall_chart as waterfall
``````

The `rcParams` parameter takes the key-value pair. Using this parameter is to access figure elements like the figure size and face color.

``````plot.rcParams["figure.figsize"] = (8, 6)
plot.rcParams["figure.facecolor"] = "yellow"
``````

Then we create a data set for XYZ company. We are going to visualize the sale of XYZ company with corresponding months.

``````x1, y1 = ["Jan", "Feb", "March", "April", "May", "jun", "July", "Aug"], [
10,
25,
30,
50,
-10,
15,
-5,
10,
]
waterfall.plot(
x1,
y1,
)
``````

Full Code - 2D waterfall plot:

``````import matplotlib.pyplot as plot
import waterfall_chart as waterfall

# Set set width and height and face color as yellow
plot.rcParams["figure.figsize"] = (8, 6)
plot.rcParams["figure.facecolor"] = "yellow"
# dependant and independent variables
x1, y1 = ["Jan", "Feb", "March", "April", "May", "jun", "July", "Aug"], [
10,
25,
30,
50,
-10,
15,
-5,
10,
]
waterfall.plot(
x1,
y1,
)
# Set x labels with 45 rotation
plot.xticks(rotation=45)

plot.title("2D Waterfall plot")
plot.tight_layout()
plot.show()
``````

Output:

The profit raised with a green plot and lost means the minus points go with the red plot, and the net sale of XYZ company goes with a blue plot.

## Create 3D Waterfall Plot With Matplotlib in Python

In the previous example, we’ve learned how to create a 2D waterfall plot. This section will demonstrate creating a 3D waterfall plot using the `PolyCollection` class from the Matplotlib library.

We will import the following required libraries to create a 3D waterfall plot.

``````from matplotlib.collections import PolyCollection
import matplotlib.pyplot as plt
from matplotlib import colors as mcolors
import numpy as np
``````

If we want to create a 3D plot, we need to call the `axes()` method from `pyplot`.

``````axes = plt.axes(projection="3d")
``````

Now we generate some random data sets for three dimensions. The `x1` variable stores the given range using the `arange()` numpy method, and the `y1` variable will generate a random integer number in every iteration using the Numpy `random.rand()` method.

``````x1 = np.arange(0, 10, 0.4)
verts = []
z1 = [0.0, 1.0, 2.0, 3.0]
for z in z1:
y1 = np.random.rand(len(x1))
y1[0], y1[-1] = 0, 0
verts.append(list(zip(x1, y1)))
``````

The `PolyCollection()` function takes the first parameter as a list of data points, and the second parameter is `facecolors` that help us display specific colors. We have already imported colors as `mcolors` from Matplotlib, and we have defined our custom function called `colors`.

The `colors()` function is called with a color value parameter and this function returns the `to_rgba()` method with color and alpha parameters.

``````def colors(arg):
return mcolors.to_rgba(arg, alpha=0.6)

poly = PolyCollection(
verts, facecolors=[colors("r"), colors("g"), colors("b"), colors("y")]
)
``````

This is just a limit or a range of data points for three dimensions.

``````axes.set_xlim3d(0, 10)
axes.set_ylim3d(-1, 4)
axes.set_zlim3d(0, 1)
``````

Full Code - 3D waterfall plot:

``````from matplotlib.collections import PolyCollection
import matplotlib.pyplot as plt
from matplotlib import colors as mcolors
import numpy as np

axes = plt.axes(projection="3d")

def colors(arg):
return mcolors.to_rgba(arg, alpha=0.6)

x1 = np.arange(0, 10, 0.4)
verts = []
z1 = [0.0, 1.0, 2.0, 3.0]
for z in z1:
y1 = np.random.rand(len(x1))
y1[0], y1[-1] = 0, 0
verts.append(list(zip(x1, y1)))

poly = PolyCollection(
verts, facecolors=[colors("r"), colors("g"), colors("b"), colors("y")]
)
poly.set_alpha(0.7)

axes.set_xlabel("X")
axes.set_xlim3d(0, 10)
axes.set_ylabel("Y")
axes.set_ylim3d(-1, 4)
axes.set_zlabel("Z")
axes.set_zlim3d(0, 1)
axes.set_title("3D Waterfall plot")

plt.show()
``````

Output:

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.