Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
How to plot thousands of circles quickly in Matplotlib?
When plotting thousands of circles in Matplotlib, using individual Circle patches becomes very slow. The efficient approach is to use CircleCollection from matplotlib.collections, which renders all circles in a single operation.
Why Use CircleCollection?
CircleCollection is optimized for rendering many similar shapes at once. Instead of creating thousands of individual patches, it handles all circles as a single collection, dramatically improving performance.
Basic Implementation
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.collections as mc
# Generate random data for 1000 circles
num_circles = 1000
sizes = 50 * np.random.random(num_circles)
positions = 10 * np.random.random((num_circles, 2))
# Create figure and axis
fig, ax = plt.subplots(figsize=(8, 6))
# Create CircleCollection
collection = mc.CircleCollection(sizes, offsets=positions,
transOffset=ax.transData,
facecolors='lightblue',
edgecolors='navy',
alpha=0.6)
# Add collection to axis
ax.add_collection(collection)
# Set axis limits and margins
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
ax.margins(0.01)
plt.title('1000 Circles Using CircleCollection')
plt.show()
Customizing Circle Appearance
You can customize colors, transparency, and other properties for more visually appealing plots ?
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.collections as mc
# Generate data
num_circles = 500
sizes = np.random.uniform(10, 100, num_circles)
positions = 15 * np.random.random((num_circles, 2))
# Create different colors for each circle
colors = np.random.rand(num_circles, 3)
# Create figure
fig, ax = plt.subplots(figsize=(10, 8))
# Create customized CircleCollection
collection = mc.CircleCollection(sizes,
offsets=positions,
transOffset=ax.transData,
facecolors=colors,
edgecolors='black',
linewidths=0.5,
alpha=0.7)
ax.add_collection(collection)
ax.set_xlim(-1, 16)
ax.set_ylim(-1, 16)
ax.set_aspect('equal')
plt.title('Colorful Circle Collection')
plt.grid(True, alpha=0.3)
plt.show()
Performance Comparison
| Method | Rendering Time | Memory Usage | Best For |
|---|---|---|---|
| Individual Circle patches | Slow (seconds) | High | < 100 circles |
| CircleCollection | Fast (milliseconds) | Low | Thousands of circles |
Key Parameters
- sizes − Array of circle radii
- offsets − Array of (x, y) positions
- transOffset − Coordinate transformation (usually ax.transData)
- facecolors − Fill colors for circles
- edgecolors − Border colors
- alpha − Transparency level (0-1)
Conclusion
Use CircleCollection for plotting thousands of circles efficiently in Matplotlib. It provides significant performance improvements over individual patches and offers flexible customization options for colors and styling.
