Open In App

Use Multiple Columns in a Matplotlib Legend

Last Updated : 09 Apr, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

Legends helps to understand what each element in the plot represents. They help to understand the meaning behind different elements like colors, markers or line styles. If a plot contains many labels a single-column legend may:

  • Take up too much vertical space
  • Overlap with the plot and
  • Look messy or cluttered.

By arranging legend items into multiple columns we can make our plot more compact and visually appealing. matplotlib makes it easy to create multi-column legends and helps us improve the readability and layout of our plots and helps in organizing them more effectively.

Step-by-Step Guide to Create Multi-Column Legends

Step 1: Import Required Libraries

To get started ensure we have Matplotlib installed. If not install it using pip:

pip install matplotlib

Next import the necessary libraries like numpy and pandas :

Python
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

Step 2: Create a Plot with Multiple Lines

Let’s begin by creating a simple plot with multiple lines. We create 4 different lines: sine, cosine, tangent and exponential decay.

  • label= “argument” gives each line a name for the legend.
  • plt.legend(ncol=2) splits the legend into 2 columns.
  • loc='upper right' places the legend in the top-right corner.
Python
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.exp(-x)

plt.plot(x, y1, label='Sine')
plt.plot(x, y2, label='Cosine')
plt.plot(x, y3, label='Tangent')
plt.plot(x, y4, label='Exponential')

Output :

file

Multiple Lines with Multi column -legend

The above plot effectively displays four distinct mathematical functions – Sine, Cosine, Tangent and Exponential on the same graph. The use of a 2-column legend minimizes vertical space and keeps the layout tidy.

Step 3: Customize the Legend Appearance

We can further customize the legend to suit our needs:

  • Font Size : Adjust the font size using the fontsize parameter.
  • Border and Background : Modify the border and background using frameon, edgecolor and facecolor.
  • Spacing : Control spacing between columns using columnspacing.

Example with additional customization:

Python
plt.figure(figsize=(8, 5))
plt.plot(x, y1, label='Sine')
plt.plot(x, y2, label='Cosine')
plt.plot(x, y3, label='Tangent')
plt.plot(x, y4, label='Exponential')

plt.legend(
    ncol=3, 
    loc='upper center', 
    fontsize=10, 
    frameon=True, 
    edgecolor='black', 
    facecolor='lightgray',
    columnspacing=1.5
)

plt.title('Customized Multi-Column Legend')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.grid(True)
plt.tight_layout()
plt.show()

Output:

file

Customized multi-column legend

This plot visualizes four mathematical functions (sine, tangent, cosine and exponential decay) with a customized multi-column legend placed at the top-center. The legend is styled with distinct colors and labels for each function enhancing readability while the gridlines provide context for the data values.

Step 4: Handle Long Labels and Move Legend Outside Plot

If our legend labels are long, multi-column legends can help prevent them from overlapping. We simulate long labels and shift the sine wave for variety.

  • bbox_to_anchor=(0.5, -0.25) positions the legend below the chart and keeps the plot clear and uncluttered.
Python
x = np.linspace(0, 10, 100)

labels = [
    'This is a very long label for sine',
    'Another long label for cosine',
    'Yet another one for tangent',
    'And the last one for exponential'
]

plt.figure(figsize=(10, 6))

for i, label in enumerate(labels):
    plt.plot(x, np.sin(x + i), label=label)

plt.legend(
    ncol=2, 
    loc='lower center', 
    bbox_to_anchor=(0.5, -0.25),  
    fontsize=9, 
    frameon=True,
    columnspacing=1.2
)

plt.title('Handling Long Labels with Multi-Column Legend')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.grid(True)
plt.tight_layout()
plt.show()

Output:

download-

Handling long Labels

This plot demonstrates four sine waves with slightly different offsets, each labeled with a long descriptive label. The legend is placed at the bottom of the plot in a multi-column layout to accommodate the lengthy labels ensuring clarity and readability while maintaining an organized appearance.

Using multi-column legends in Matplotlib is a simple yet powerful way to enhance the readability. Whether you’re working with line plots, bar charts or scatter plots the ncol parameter allows us to organize our legend efficiently.



Next Article
Article Tags :
Practice Tags :

Similar Reads