ภาพรวม
การสร้าง Circle object จำนวนมาก (พันลูกขึ้นไป) ด้วยลูปปกติจะช้า มาก ใช้ matplotlib.collections.CircleCollection แทนเพื่อประสิทธิภาพสูง
ขั้นตอนการทำงาน
- Import numpy, matplotlib.pyplot, matplotlib.collections
- กำหนดขนาดฟิกเกอร์
- สร้างข้อมูลสุ่ม: จำนวนวงกลม, ตำแหน่ง (xy), ขนาด (sizes)
- สร้าง
CircleCollectionส่ง offsets, sizes, transform, color - เพิ่ม collection ลง axes ด้วย
ax.add_collection() - ตั้งค่า margins และแสดงผล
ตัวอย่างโค้ด
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.collections as mc
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
num = 1000
sizes = 50 * np.random.random(num)
xy = 10 * np.random.random((num, 2))
fig, ax = plt.subplots()
collection = mc.CircleCollection(sizes, offsets=xy, transOffset=ax.transData, color='green')
ax.add_collection(collection)
ax.margins(0.01)
plt.show()
ผลลัพธ์
วงกลมสีเขียว 1000 ลูกกระจายสุ่ม รенเดอร์เร็วมาก

ทำไมถึงเร็วกว่า
- CircleCollection ใช้ GPU/vectorized rendering วาดทุกวงกลมใน draw call เดียว
- ลูปสร้าง Circle object แยกต่างหาก ใช้ overhead มากต่อ object
- เหมาะสำหรับ scatter plot ขนาดใหญ่, particle simulation, heatmap แบบจุด