0
0
Matplotlibdata~5 mins

Multiple legends in Matplotlib

Choose your learning style9 modes available
Introduction

Sometimes you want to explain different groups of lines or points separately in one plot. Multiple legends help you do that clearly.

You have a plot with lines of different colors and styles representing different categories.
You want to show one legend for data groups and another for marker shapes.
You need to explain multiple sets of data on the same graph separately.
You want to keep the plot clean by splitting legend information into parts.
Syntax
Matplotlib
legend1 = plt.legend(handles=group1_handles, loc='upper left')
plt.gca().add_artist(legend1)
plt.legend(handles=group2_handles, loc='upper right')

You create the first legend and add it to the plot as an artist.

Then you create the second legend normally. This way both show up.

Examples
This example shows two lines with separate legends on opposite corners.
Matplotlib
import matplotlib.pyplot as plt

line1, = plt.plot([1, 2, 3], label='Group A')
line2, = plt.plot([3, 2, 1], label='Group B')

legend1 = plt.legend(handles=[line1], loc='upper left')
plt.gca().add_artist(legend1)
plt.legend(handles=[line2], loc='upper right')
plt.show()
This example shows how to add one legend for lines and another for scatter points with titles.
Matplotlib
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
line1, = plt.plot(x, np.sin(x), 'r-', label='Sine wave')
line2, = plt.plot(x, np.cos(x), 'b--', label='Cosine wave')

scatter = plt.scatter([2, 4, 6], [0, 0, 0], c='g', label='Points')

legend1 = plt.legend(handles=[line1, line2], title='Lines', loc='upper left')
plt.gca().add_artist(legend1)
plt.legend(handles=[scatter], title='Markers', loc='lower right')
plt.show()
Sample Program

This program plots two decay curves and some sample points. It adds two legends: one for the lines and one for the points, placed in different corners for clarity.

Matplotlib
import matplotlib.pyplot as plt
import numpy as np

# Create data
x = np.linspace(0, 5, 100)
y1 = np.exp(-x)
y2 = np.exp(-0.5 * x)

# Plot two lines
line1, = plt.plot(x, y1, 'b-', label='Fast decay')
line2, = plt.plot(x, y2, 'r--', label='Slow decay')

# Plot some points
points = plt.scatter([1, 2, 3], [0.8, 0.6, 0.4], c='green', label='Samples')

# First legend for lines
legend1 = plt.legend(handles=[line1, line2], title='Decay types', loc='upper right')
plt.gca().add_artist(legend1)

# Second legend for points
plt.legend(handles=[points], title='Data points', loc='lower left')

plt.xlabel('Time')
plt.ylabel('Value')
plt.title('Multiple Legends Example')
plt.show()
OutputSuccess
Important Notes

Always add the first legend as an artist before adding the second one.

Use different locations to avoid legends overlapping.

You can customize legend titles and styles for better clarity.

Summary

Multiple legends help explain different data groups clearly in one plot.

Create the first legend and add it as an artist, then add the second normally.

Place legends in different locations to keep the plot readable.