Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib에서 수천 개의 원을 빠르게 그리는 방법

Matplotlib에서 수천 개의 원을 빠르게 그리려면 matplotlib.collections 모듈을 활용해야 합니다. 특히 이 글에서는 CircleCollection 클래스를 사용하여 대량의 원을 효율적으로 렌더링하는 방법을 소개합니다.

구현 단계

  • matplotlib에서 collections 패키지를 가져오고, 함께 pyplotnumpy도 임포트합니다.
  • 그림(figure) 크기를 설정하고 서브플롯 주변의 여백(padding)을 조정합니다.
  • 작은 원의 개수를 나타내는 변수 "num"과 원의 크기를 담을 변수 "sizes"를 초기화합니다.
  • 원 패치(circle patch) 목록을 생성합니다.
  • 현재 축(axis)에 원 패치 아티스트를 추가합니다.
  • 축의 마진(margins)을 설정합니다.
  • show() 메서드를 호출하여 그림을 화면에 표시합니다.

예제 코드

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))

patches = [plt.Circle(center, size) for center, size in zip(xy, sizes)]

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()

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

Matplotlib에서 수천 개의 원을 빠르게 그리는 방법Matplotlib에서 수천 개의 원을 빠르게 그리는 방법

핵심 포인트 정리

개별 원을 하나씩 plt.Circle()로 추가하는 방식은 원의 개수가 많아질수록 렌더링 속도가 크게 느려집니다. 반면 CircleCollection은 모든 원을 하나의 컬렉션 객체로 묶어 한 번에 그리기 때문에 수천 개 이상의 원을 그릴 때 성능상 큰 이점을 제공합니다. offsets 매개변수에 각 원의 중심 좌표 배열을 전달하고, transOffset=ax.transData로 데이터 좌표계를 지정하면 됩니다.