Legend placement and styling in Matplotlib - Time & Space Complexity
When we add and style a legend in a matplotlib plot, the computer does extra work to place and draw it.
We want to know how this extra work grows when the legend has more items or styles.
Analyze the time complexity of the following code snippet.
import matplotlib.pyplot as plt
n = 10 # Define n before using it
labels = [f'Line {i}' for i in range(1, n+1)]
for i in range(n):
plt.plot([0, 1], [i, i], label=labels[i])
plt.legend(loc='upper right', fontsize=10, frameon=True)
plt.show()
This code plots n lines and adds a legend with n labels, styling it with font size and a frame.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through n lines to plot and label each one.
- How many times: The loop runs n times, once per line and label.
As the number of lines n grows, the work to plot and label each line grows roughly the same.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 plotting and labeling steps |
| 100 | About 100 plotting and labeling steps |
| 1000 | About 1000 plotting and labeling steps |
Pattern observation: The work grows directly with the number of legend items.
Time Complexity: O(n)
This means the time to place and style the legend grows linearly with the number of items.
[X] Wrong: "Adding a legend is always a fixed cost no matter how many items it has."
[OK] Correct: Each legend item adds work because it must be drawn and positioned, so more items mean more time.
Understanding how adding features like legends affects performance helps you write efficient data visualizations in real projects.
"What if we added multiple legends or complex custom styles? How would the time complexity change?"
Practice
loc parameter control in a matplotlib legend?Solution
Step 1: Understand the role of
Thelocin legendlocparameter specifies where the legend appears on the plot, such as 'upper right' or 'lower left'.Step 2: Differentiate from other styling options
Other options control color, size, or line style, butloconly controls position.Final Answer:
The position of the legend on the plot -> Option DQuick Check:
Legend position = loc [OK]
- Confusing loc with color or font size
- Thinking loc changes plot markers
- Assuming loc controls line style
Solution
Step 1: Identify the correct parameter name
The correct parameter to set legend position isloc, notlocationorposition.Step 2: Use the correct string value
The valid string is 'lower left' with a space, not 'lower_left' with underscore.Final Answer:
plt.legend(loc='lower left') -> Option AQuick Check:
Correct syntax uses loc='lower left' [OK]
- Using 'location' instead of 'loc'
- Using underscores instead of spaces
- Using 'position' parameter which doesn't exist
import matplotlib.pyplot as plt plt.plot([1, 2, 3], label='Line A') plt.plot([3, 2, 1], label='Line B') plt.legend(loc='upper center', shadow=True, fontsize='small') plt.show()
Solution
Step 1: Analyze legend parameters
Theloc='upper center'places the legend at the top center.shadow=Trueadds a shadow behind the legend box.fontsize='small'sets the font size smaller than default.Step 2: Confirm no errors in parameters
All parameters are valid and supported by matplotlib.Final Answer:
Legend appears at the top center with a shadow and small font -> Option BQuick Check:
loc + shadow + fontsize = top center, shadow, small font [OK]
- Assuming fontsize='small' causes error
- Confusing loc='upper center' with bottom right
- Ignoring shadow parameter effect
import matplotlib.pyplot as plt plt.plot([1, 2, 3], label='A') plt.plot([3, 2, 1], label='B') plt.legend(loc='bottomright') plt.show()
Solution
Step 1: Check the loc parameter value
The valid location string is 'lower right', not 'bottomright'. 'bottomright' is not recognized by matplotlib.Step 2: Verify other parts of the code
Labels are correctly set, plt.legend() can be called after plotting, and plt.show() has parentheses.Final Answer:
The loc value 'bottomright' is invalid; should be 'lower right' -> Option CQuick Check:
Valid loc strings = 'lower right' not 'bottomright' [OK]
- Using invalid loc strings
- Thinking plt.legend() must come before plt.plot()
- Forgetting parentheses in plt.show()
Solution
Step 1: Understand placing legend outside plot
Usingloc='center right'withbbox_to_anchor=(1, 0.5)places the legend outside on the right side centered vertically.Step 2: Check styling parameters
Title 'Legend', font size 12 (string with units '12pt'), and shadow=True are correctly set.loc='right side'andloc='outside right'are invalid.Final Answer:
plt.legend(loc='center right', bbox_to_anchor=(1, 0.5), title='Legend', fontsize='12pt', shadow=True) -> Option AQuick Check:
loc + bbox_to_anchor + title + fontsize + shadow = correct legend outside right [OK]
- Using invalid loc like 'right side' or 'outside right'
- Passing fontsize as integer without units
- Forgetting bbox_to_anchor for outside placement
Ready to prove it?
Pass the test and this pattern moves unknown
