How to add hatchs and patterns in Matplotlib

logo of a chart:Colours

Hatchs and patterns significantly enhance the informational depth of your charts. This post delves into the process of incorporating hatchs and patterns into your Matplotlib plots.

Learn how to design a boxplot, a barplot, a histogram and an area chart with unique hatchs and colors for each group, and explore customization techniques for both hatchs and colors.

Libraries

For creating this chart, we will need to load the following libraries:

  • pandas for data manipulation
  • matplotlib for creatin the chart
  • numpy for smoothing the chart
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

Hatch in barplots

Hatchs, or patterns, are a way to fill a chart with a pattern instead of a simple color. It can be useful when you want to print the chart in black and white, or when you want to add a bit of style to your chart.

Matplotlib offers a variety of patterns: /, \\, |, -, +, x, o, O, ., *

In order to use a different hatch for each bar, you can use the hatch parameter of the bar() function. It should be a list of the same length as the number of bars in your chart.

Here is how to use it with the bar() function:

plt.bar(
   height=[50, 70, 30],
   x=['Group A', 'Group B', 'Group C'],
   hatch=['*', 'O', '+'],
   color=['darkred', 'lightgreen', 'skyblue']
)
plt.show()

Hatch in area chart

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(
   x, y,
   color='darkred',
)
plt.fill_between(
   x, y,
   color='red',
   hatch='///',
   alpha=0.4,
   edgecolor='black'
)
plt.show()

Hatch in histogram

x = np.random.normal(0, 1, 10000)

plt.hist(
   x,
   bins=100,
   color='lightblue',
   edgecolor='black',
   hatch='*',
   linewidth=.2
)
plt.show()

Hatch in boxplots

url = 'https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/iris.csv'
df = pd.read_csv(url)
grouped = df.groupby('species')['sepal_length']

# Init a figure and axes
fig, ax = plt.subplots(figsize=(8, 8))

# Create the plot with different colors for each group
boxplot = ax.boxplot(
    x=[group.values for name, group in grouped],
    labels=grouped.groups.keys(),
    patch_artist=True,
)

# Define colors for each group
colors = ['orange', 'purple', 'green']
hatchs = ['*', 'O', '//']

# Assign colors to each box in the boxplot
for box, color, hatch in zip(boxplot['boxes'], colors, hatchs):
    box.set_facecolor(color)
    box.set(hatch=hatch)

# Display it
plt.show()

Going further

This article explains how to add patterns to charts in matplotlib.

You might be interested in:

Animation with python

Animation

Contact & Edit


👋 This document is a work by Yan Holtz. You can contribute on github, send me a feedback on twitter or subscribe to the newsletter to know when new examples are published! 🔥

This page is just a jupyter notebook, you can edit it here. Please help me making this website better 🙏!