Matplotlib Path Effects Tutorial

PythonPythonBeginner
Practice Now

This tutorial is from open-source community. Access the source code

Introduction

In this lab, you will learn how to use path effects in Matplotlib to add special effects to your plots. Path effects allow you to add custom strokes, shadows, and other visual effects to your text and plot elements.

VM Tips

After the VM startup is done, click the top left corner to switch to the Notebook tab to access Jupyter Notebook for practice.

Sometimes, you may need to wait a few seconds for Jupyter Notebook to finish loading. The validation of operations cannot be automated because of limitations in Jupyter Notebook.

If you face issues during learning, feel free to ask Labby. Provide feedback after the session, and we will promptly resolve the problem for you.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("`Python`")) -.-> python/BasicConceptsGroup(["`Basic Concepts`"]) python(("`Python`")) -.-> python/FileHandlingGroup(["`File Handling`"]) matplotlib(("`Matplotlib`")) -.-> matplotlib/BasicConceptsGroup(["`Basic Concepts`"]) matplotlib(("`Matplotlib`")) -.-> matplotlib/PlottingDataGroup(["`Plotting Data`"]) matplotlib(("`Matplotlib`")) -.-> matplotlib/PlotCustomizationGroup(["`Plot Customization`"]) matplotlib(("`Matplotlib`")) -.-> matplotlib/SpecializedPlotsGroup(["`Specialized Plots`"]) python(("`Python`")) -.-> python/DataStructuresGroup(["`Data Structures`"]) python(("`Python`")) -.-> python/ModulesandPackagesGroup(["`Modules and Packages`"]) python(("`Python`")) -.-> python/PythonStandardLibraryGroup(["`Python Standard Library`"]) python(("`Python`")) -.-> python/DataScienceandMachineLearningGroup(["`Data Science and Machine Learning`"]) python(("`Python`")) -.-> python/FunctionsGroup(["`Functions`"]) python/BasicConceptsGroup -.-> python/comments("`Comments`") python/FileHandlingGroup -.-> python/with_statement("`Using with Statement`") matplotlib/BasicConceptsGroup -.-> matplotlib/importing_matplotlib("`Importing Matplotlib`") matplotlib/BasicConceptsGroup -.-> matplotlib/figures_axes("`Understanding Figures and Axes`") matplotlib/PlottingDataGroup -.-> matplotlib/line_plots("`Line Plots`") matplotlib/PlottingDataGroup -.-> matplotlib/heatmaps("`Heatmaps`") matplotlib/PlotCustomizationGroup -.-> matplotlib/line_styles_colors("`Customizing Line Styles and Colors`") matplotlib/PlotCustomizationGroup -.-> matplotlib/legend_config("`Legend Configuration`") matplotlib/PlotCustomizationGroup -.-> matplotlib/grid_config("`Grid Configuration`") matplotlib/PlotCustomizationGroup -.-> matplotlib/text_annotations("`Text Annotations`") matplotlib/SpecializedPlotsGroup -.-> matplotlib/contour_plots("`Contour Plots`") python/BasicConceptsGroup -.-> python/variables_data_types("`Variables and Data Types`") python/BasicConceptsGroup -.-> python/booleans("`Booleans`") python/DataStructuresGroup -.-> python/lists("`Lists`") python/DataStructuresGroup -.-> python/tuples("`Tuples`") python/ModulesandPackagesGroup -.-> python/importing_modules("`Importing Modules`") python/ModulesandPackagesGroup -.-> python/standard_libraries("`Common Standard Libraries`") python/PythonStandardLibraryGroup -.-> python/data_collections("`Data Collections`") python/DataScienceandMachineLearningGroup -.-> python/numerical_computing("`Numerical Computing`") python/DataScienceandMachineLearningGroup -.-> python/data_visualization("`Data Visualization`") python/FunctionsGroup -.-> python/build_in_functions("`Build-in Functions`") subgraph Lab Skills python/comments -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} python/with_statement -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} matplotlib/importing_matplotlib -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} matplotlib/figures_axes -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} matplotlib/line_plots -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} matplotlib/heatmaps -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} matplotlib/line_styles_colors -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} matplotlib/legend_config -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} matplotlib/grid_config -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} matplotlib/text_annotations -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} matplotlib/contour_plots -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} python/variables_data_types -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} python/booleans -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} python/lists -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} python/tuples -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} python/importing_modules -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} python/standard_libraries -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} python/data_collections -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} python/numerical_computing -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} python/data_visualization -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} python/build_in_functions -.-> lab-48855{{"`Matplotlib Path Effects Tutorial`"}} end

Import Libraries and Prepare Data

First, we need to import the necessary libraries and prepare some data to plot.

import matplotlib.pyplot as plt
import numpy as np

## Prepare data
arr = np.arange(25).reshape((5, 5))

Add Stroke Effect to Text

We can add a stroke effect to text using the withStroke path effect. In this example, we will add a stroke effect to the text annotation in the plot.

## Create plot and add text annotation with stroke effect
fig, ax = plt.subplots()
ax.imshow(arr)
txt = ax.annotate("test", (1., 1.), (0., 0),
                   arrowprops=dict(arrowstyle="->",
                                   connectionstyle="angle3", lw=2),
                   size=20, ha="center",
                   path_effects=[patheffects.withStroke(linewidth=3,
                                                        foreground="w")])
txt.arrow_patch.set_path_effects([
    patheffects.Stroke(linewidth=5, foreground="w"),
    patheffects.Normal()])

## Add grid with stroke effect
pe = [patheffects.withStroke(linewidth=3,
                             foreground="w")]
ax.grid(True, linestyle="-", path_effects=pe)

plt.show()

Add Stroke Effect to Contour Lines

We can also add stroke effects to contour lines and their labels using the withStroke path effect.

## Create plot and add contour lines with stroke effect
fig, ax = plt.subplots()
ax.imshow(arr)
cntr = ax.contour(arr, colors="k")

plt.setp(cntr.collections, path_effects=[
    patheffects.withStroke(linewidth=3, foreground="w")])

clbls = ax.clabel(cntr, fmt="%2.0f", use_clabeltext=True)
plt.setp(clbls, path_effects=[
    patheffects.withStroke(linewidth=3, foreground="w")])

plt.show()

Add Shadow Effect to Legend

We can add a shadow effect to a legend using the withSimplePatchShadow path effect.

## Create plot and add shadow effect to legend
fig, ax = plt.subplots()
p1, = ax.plot([0, 1], [0, 1])
leg = ax.legend([p1], ["Line 1"], fancybox=True, loc='upper left')
leg.legendPatch.set_path_effects([patheffects.withSimplePatchShadow()])

plt.show()

Summary

In this lab, you learned how to use path effects in Matplotlib to add special effects to your plots. You learned how to add stroke effects to text, contour lines, and their labels, as well as how to add a shadow effect to a legend. With path effects, you can create visually stunning plots that convey your data in a clear and concise way.

Other Python Tutorials you may like