Customize Matplotlib Spines

PythonPythonBeginner
Practice Now

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

Introduction

In this lab, you will learn how to customize spines in Matplotlib. Spines are the lines that connect the axis tick marks and demarcate the boundaries of the data area. By default, Matplotlib displays spines on all four sides of the plot. However, you may want to customize these spines to better highlight your data.

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`"]) python(("`Python`")) -.-> python/ControlFlowGroup(["`Control Flow`"]) python(("`Python`")) -.-> python/DataStructuresGroup(["`Data Structures`"]) python(("`Python`")) -.-> python/ModulesandPackagesGroup(["`Modules and Packages`"]) 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`") python/BasicConceptsGroup -.-> python/booleans("`Booleans`") python/ControlFlowGroup -.-> python/for_loops("`For Loops`") python/DataStructuresGroup -.-> python/tuples("`Tuples`") python/ModulesandPackagesGroup -.-> python/importing_modules("`Importing Modules`") 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-48954{{"`Customize Matplotlib Spines`"}} python/with_statement -.-> lab-48954{{"`Customize Matplotlib Spines`"}} matplotlib/importing_matplotlib -.-> lab-48954{{"`Customize Matplotlib Spines`"}} matplotlib/figures_axes -.-> lab-48954{{"`Customize Matplotlib Spines`"}} matplotlib/line_plots -.-> lab-48954{{"`Customize Matplotlib Spines`"}} python/booleans -.-> lab-48954{{"`Customize Matplotlib Spines`"}} python/for_loops -.-> lab-48954{{"`Customize Matplotlib Spines`"}} python/tuples -.-> lab-48954{{"`Customize Matplotlib Spines`"}} python/importing_modules -.-> lab-48954{{"`Customize Matplotlib Spines`"}} python/numerical_computing -.-> lab-48954{{"`Customize Matplotlib Spines`"}} python/data_visualization -.-> lab-48954{{"`Customize Matplotlib Spines`"}} python/build_in_functions -.-> lab-48954{{"`Customize Matplotlib Spines`"}} end

Import Matplotlib and NumPy

First, we need to import Matplotlib and NumPy libraries to create our plot. We will use NumPy to create sample data for our plot.

import matplotlib.pyplot as plt
import numpy as np

Create Sample Data

Next, we will create sample data for our plot using NumPy. We will generate 100 data points between 0 and 2π and compute their corresponding sine values.

x = np.linspace(0, 2 * np.pi, 100)
y = 2 * np.sin(x)

Create Subplots

We will create three subplots to demonstrate different spine customizations. We will use constrained layout to ensure that the labels do not overlap the axes.

fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, layout='constrained')

Customize Spines for All Four Sides

In the first subplot, we will display spines on all four sides of the plot. We can access the spines of each subplot using the container ax.spines. We can then customize the spines using various methods.

ax0.plot(x, y)
ax0.set_title('Normal Spines')

Customize Spines for Bottom and Left Sides

In the second subplot, we will display spines only on the bottom and left sides of the plot. We can hide the spines on the right and top sides of the plot using the set_visible method.

ax1.plot(x, y)
ax1.set_title('Bottom-Left Spines')

## Hide the right and top spines
ax1.spines.right.set_visible(False)
ax1.spines.top.set_visible(False)

Customize Spines with Bounds Limited to Data Range

In the third subplot, we will display spines with bounds limited to the data range. We can limit the extent of each spine to the data range using the set_bounds method.

ax2.plot(x, y)
ax2.set_title('Spines with Bounds Limited to Data Range')

## Only draw spines for the data range, not in the margins
ax2.spines.bottom.set_bounds(x.min(), x.max())
ax2.spines.left.set_bounds(y.min(), y.max())
## Hide the right and top spines
ax2.spines.right.set_visible(False)
ax2.spines.top.set_visible(False)

Show the Plot

Finally, we will display the plot using the show method.

plt.show()

Summary

In this lab, you learned how to customize spines in Matplotlib. Specifically, you learned how to display spines on specific sides of the plot, hide spines on specific sides of the plot, and limit the extent of each spine to the data range. By customizing spines, you can create plots that better highlight your data and improve their overall readability.

Other Python Tutorials you may like