0
0
Matplotlibdata~20 mins

LineCollection and PolyCollection for speed in Matplotlib - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Line and Polygon Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
1:30remaining
Output of LineCollection plot segments count
What is the number of line segments drawn by this code using LineCollection?
Matplotlib
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

segments = [ [(0, 0), (1, 1)], [(1, 1), (2, 0)], [(2, 0), (3, 1)]]
line_collection = LineCollection(segments)
fig, ax = plt.subplots()
ax.add_collection(line_collection)
ax.autoscale()
plt.close(fig)

num_segments = len(line_collection.get_segments())
print(num_segments)
A1
B2
C3
D0
Attempts:
2 left
💡 Hint
Count how many pairs of points are in the segments list.
data_output
intermediate
1:30remaining
Number of polygons in PolyCollection
How many polygons does this PolyCollection contain?
Matplotlib
from matplotlib.collections import PolyCollection

polygons = [ [(0, 0), (1, 0), (0.5, 1)], [(1, 1), (2, 1), (1.5, 2)]]
poly_collection = PolyCollection(polygons)
num_polygons = len(poly_collection.get_paths())
print(num_polygons)
A1
B2
C0
D3
Attempts:
2 left
💡 Hint
Each polygon is a list of points; count how many polygons are given.
visualization
advanced
2:00remaining
Visual difference between LineCollection and multiple plot calls
Which option shows the fastest way to plot 1000 line segments using matplotlib?
Matplotlib
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
import numpy as np

segments = [ [(i, 0), (i, 1)] for i in range(1000)]

# Option A: Using LineCollection
fig, ax = plt.subplots()
lc = LineCollection(segments)
ax.add_collection(lc)
ax.autoscale()
plt.close(fig)

# Option B: Using 1000 plot calls
fig2, ax2 = plt.subplots()
for seg in segments:
    ax2.plot([seg[0][0], seg[1][0]], [seg[0][1], seg[1][1]])
plt.close(fig2)
ANeither method works for large numbers of segments.
BUsing 1000 plot calls is faster because each line is drawn separately.
CBoth methods have the same speed because matplotlib optimizes internally.
DUsing LineCollection is faster because it batches all segments in one object.
Attempts:
2 left
💡 Hint
Think about how matplotlib handles many lines internally.
🔧 Debug
advanced
1:30remaining
Error when passing wrong data to PolyCollection
What error does this code raise when creating a PolyCollection with incorrect polygon data?
Matplotlib
from matplotlib.collections import PolyCollection

polygons = [ [(0, 0), (1, 0)], [(1, 1), (2, 1), (1.5, 2)]]
poly_collection = PolyCollection(polygons)
AValueError: Polygons must have at least 3 vertices
BTypeError: Expected a list of tuples
CIndexError: list index out of range
DNo error, PolyCollection accepts any polygon
Attempts:
2 left
💡 Hint
A polygon needs at least 3 points to be valid.
🚀 Application
expert
2:30remaining
Efficiently plotting thousands of polygons with PolyCollection
You want to plot 5000 polygons efficiently. Which approach is best?
Matplotlib
import matplotlib.pyplot as plt
from matplotlib.collections import PolyCollection
import numpy as np

polygons = [np.random.rand(4, 2) for _ in range(5000)]

# Option A: Create one PolyCollection with all polygons
# Option B: Plot each polygon with plt.fill()
# Option C: Use multiple PolyCollections each with 100 polygons
# Option D: Use scatter plot instead
ACreate one PolyCollection with all polygons to minimize draw calls.
BPlot each polygon individually with plt.fill() for better control.
CUse multiple PolyCollections with smaller batches to avoid memory issues.
DUse scatter plot to represent polygons as points.
Attempts:
2 left
💡 Hint
Batching many polygons reduces overhead and speeds up rendering.