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.

Updated on: 2026-03-26T02:30:28+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements