Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีพลอตวงกลมจำนวนมาก (พันลูก) ให้เร็วใน Matplotlib ด้วย CircleCollection

ภาพรวม

การสร้าง 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 ลูกกระจายสุ่ม รенเดอร์เร็วมาก

วิธีพลอตวงกลมจำนวนมาก (พันลูก) ให้เร็วใน Matplotlib ด้วย CircleCollection วิธีพลอตวงกลมจำนวนมาก (พันลูก) ให้เร็วใน Matplotlib ด้วย CircleCollection

ทำไมถึงเร็วกว่า

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