Bird
Raised Fist0
Matplotlibdata~5 mins

Custom legend entries in Matplotlib

Choose your learning style10 modes available
Introduction

Sometimes you want to explain your plot with labels that are different from the default ones. Custom legend entries let you create clear, easy-to-understand legends for your charts.

When your plot has multiple lines or markers but you want to group some of them under one label.
When you want to add a legend entry for something not directly plotted, like a threshold line or a special marker.
When the automatic legend labels are too long or unclear and you want simpler descriptions.
When you want to show a legend for colors or shapes used in the plot that don’t come from a single plot command.
Syntax
Matplotlib
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

# Create custom legend entries
custom_legend = [
    Line2D([0], [0], color='blue', lw=2, label='Blue line'),
    Line2D([0], [0], marker='o', color='w', markerfacecolor='red', markersize=10, label='Red dots')
]

# Add legend to plot
plt.legend(handles=custom_legend)

You create custom legend entries by making objects like Line2D or Patch with the style you want.

Then you pass these objects as a list to the handles parameter of plt.legend().

Examples
This shows a legend with one green line even though the plot is empty.
Matplotlib
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

# Empty plot
plt.plot([])

# Custom legend with one entry
custom_legend = [Line2D([0], [0], color='green', lw=3, label='Green line')]
plt.legend(handles=custom_legend)
plt.show()
Legend shows a purple line and an orange square marker, even though only the purple line is plotted.
Matplotlib
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

# Plot one line
plt.plot([1, 2, 3], [4, 5, 6], color='purple')

# Custom legend with two entries
custom_legend = [
    Line2D([0], [0], color='purple', lw=2, label='Purple line'),
    Line2D([0], [0], marker='s', color='w', markerfacecolor='orange', markersize=8, label='Orange square')
]
plt.legend(handles=custom_legend)
plt.show()
Custom legend entry for bar color using Patch.
Matplotlib
import matplotlib.pyplot as plt
from matplotlib.patches import Patch

# Plot bars
plt.bar([1, 2], [3, 4], color='cyan')

# Custom legend with patch
custom_legend = [Patch(facecolor='cyan', label='Cyan bars')]
plt.legend(handles=custom_legend)
plt.show()
Sample Program

This program first shows a normal legend for two lines. Then it shows how to add a custom legend with an extra marker entry that is not plotted.

Matplotlib
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

# Plot two lines
x_values = [0, 1, 2, 3]
line1 = plt.plot(x_values, [1, 2, 3, 4], color='blue')
line2 = plt.plot(x_values, [4, 3, 2, 1], color='red')

print('Before adding custom legend:')
plt.legend(['Blue line', 'Red line'])
plt.show()

# Now create custom legend entries
custom_legend = [
    Line2D([0], [0], color='blue', lw=2, label='Blue line'),
    Line2D([0], [0], color='red', lw=2, label='Red line'),
    Line2D([0], [0], marker='o', color='w', markerfacecolor='green', markersize=10, label='Special marker')
]

print('After adding custom legend with extra marker:')
plt.plot(x_values, [1, 2, 3, 4], color='blue')
plt.plot(x_values, [4, 3, 2, 1], color='red')
plt.legend(handles=custom_legend)
plt.show()
OutputSuccess
Important Notes

Time complexity is very low since legend creation is simple and fast.

Space complexity depends on how many custom entries you create, usually small.

Common mistake: forgetting to pass the custom objects to handles and expecting automatic legend.

Use custom legend entries when you want full control over legend appearance beyond automatic labels.

Summary

Custom legend entries let you create clear, tailored legends for your plots.

You create legend items using objects like Line2D or Patch with desired styles.

Pass these objects as a list to plt.legend(handles=...) to show your custom legend.

Practice

(1/5)
1. What is the main purpose of creating custom legend entries in matplotlib?
easy
A. To change the plot background color
B. To increase the plot size
C. To add labels for plot elements that are not automatically labeled
D. To save the plot as an image file

Solution

  1. Step 1: Understand legend purpose

    Legends explain what different plot elements represent.
  2. Step 2: Identify custom legend role

    Custom legend entries add labels for elements not labeled automatically.
  3. Final Answer:

    To add labels for plot elements that are not automatically labeled -> Option C
  4. Quick Check:

    Custom legend entries = add labels [OK]
Hint: Custom legends label unlabeled plot parts quickly [OK]
Common Mistakes:
  • Confusing legend with plot size or color
  • Thinking legend changes plot background
  • Assuming legend saves the plot
2. Which of the following is the correct way to create a custom legend entry for a red line using matplotlib.lines.Line2D?
easy
A. Line2D([0], [0], color='red', label='Red Line')
B. Line2D(color='red', label='Red Line')
C. Line2D([0,1], [0,1], color='red')
D. Line2D([0], [0], 'red', label='Red Line')

Solution

  1. Step 1: Check Line2D constructor

    Line2D requires x and y data points as first two arguments.
  2. Step 2: Verify correct syntax

    Line2D([0], [0], color='red', label='Red Line') uses [0], [0] for points, color='red', and label='Red Line' correctly.
  3. Final Answer:

    Line2D([0], [0], color='red', label='Red Line') -> Option A
  4. Quick Check:

    Line2D needs x,y points + color + label [OK]
Hint: Line2D needs x and y lists first, then style [OK]
Common Mistakes:
  • Omitting x and y data points
  • Passing color as positional argument
  • Missing label parameter
3. What will be the output legend labels for this code snippet?
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

plt.plot([1, 2, 3], [4, 5, 6], 'b-')
custom_line = Line2D([0], [0], color='red', lw=2)
plt.legend([custom_line], ['Custom Red Line'])
plt.show()
medium
A. A legend with two labels: 'Custom Red Line' and 'blue line'
B. A legend with one label: 'blue line' shown in blue
C. No legend will appear
D. A legend with one label: 'Custom Red Line' shown in red

Solution

  1. Step 1: Analyze plot and legend calls

    Plot draws a blue line but legend uses only custom_line handle with label 'Custom Red Line'.
  2. Step 2: Understand legend content

    Legend shows only what is passed: one red line with label 'Custom Red Line'.
  3. Final Answer:

    A legend with one label: 'Custom Red Line' shown in red -> Option D
  4. Quick Check:

    Legend shows passed handles and labels only [OK]
Hint: Legend shows only handles and labels you pass [OK]
Common Mistakes:
  • Assuming plot lines auto-appear in legend
  • Expecting multiple legend entries without passing handles
  • Thinking legend is empty
4. Identify the error in this code that tries to add a custom legend entry for a green square patch:
import matplotlib.pyplot as plt
from matplotlib.patches import Patch

patch = Patch(color='green', label='Green Square')
plt.legend(handles=patch, labels=['Green Square'])
plt.show()
medium
A. Patch cannot be used for legend entries
B. The 'handles' argument should be a list, not a single Patch object
C. The 'label' parameter is missing in Patch
D. plt.show() must come before plt.legend()

Solution

  1. Step 1: Check handles argument type

    plt.legend expects handles as a list or iterable, not a single object.
  2. Step 2: Identify fix

    Wrap patch in a list: handles=[patch] to fix the error.
  3. Final Answer:

    The 'handles' argument should be a list, not a single Patch object -> Option B
  4. Quick Check:

    Handles must be list or iterable [OK]
Hint: Always pass handles as a list to plt.legend [OK]
Common Mistakes:
  • Passing single object instead of list to handles
  • Ignoring label parameter in Patch
  • Calling plt.show() before plt.legend()
5. You want to create a legend with a blue dashed line labeled 'Trend' and a red circle marker labeled 'Data Point'. Which code correctly creates custom legend entries for this?
hard
A. from matplotlib.lines import Line2D legend_elements = [Line2D([0], [0], color='blue', lw=2, linestyle='--', label='Trend'), Line2D([0], [0], marker='o', color='red', linestyle='', label='Data Point')] plt.legend(handles=legend_elements)
B. from matplotlib.patches import Patch legend_elements = [Patch(color='blue', label='Trend'), Patch(color='red', label='Data Point')] plt.legend(handles=legend_elements)
C. plt.legend(['Trend', 'Data Point'], loc='best')
D. plt.legend(['blue dashed line', 'red circle'])

Solution

  1. Step 1: Identify correct legend handles

    Blue dashed line and red circle marker require Line2D objects with correct styles.
  2. Step 2: Verify code correctness

    from matplotlib.lines import Line2D legend_elements = [Line2D([0], [0], color='blue', lw=2, linestyle='--', label='Trend'), Line2D([0], [0], marker='o', color='red', linestyle='', label='Data Point')] plt.legend(handles=legend_elements) creates Line2D with color='blue', linestyle='--' for 'Trend' and marker='o', color='red' for 'Data Point', then passes handles to plt.legend.
  3. Final Answer:

    from matplotlib.lines import Line2D legend_elements = [Line2D([0], [0], color='blue', lw=2, linestyle='--', label='Trend'), Line2D([0], [0], marker='o', color='red', linestyle='', label='Data Point')] plt.legend(handles=legend_elements) -> Option A
  4. Quick Check:

    Use Line2D with style and marker for custom legend [OK]
Hint: Use Line2D with marker and linestyle for custom legend [OK]
Common Mistakes:
  • Using Patch for line and marker legend
  • Passing only label strings without handles
  • Ignoring linestyle or marker parameters
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard