소개
이 튜토리얼에서는 Matplotlib 에서 Line2D의 markevery 속성을 사용하여 데이터 포인트의 하위 집합에 마커를 그리는 과정을 안내합니다. 정수, 튜플, 리스트, 슬라이스 및 float 를 사용하여 마커를 지정하는 다양한 방법을 다룰 것입니다. 또한 markevery가 선형 및 로그 스케일, 확대/축소된 플롯 및 극좌표 플롯에서 어떻게 동작하는지 살펴볼 것입니다.
VM 팁
VM 시작이 완료되면 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 액세스하십시오.
때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한 사항으로 인해 작업의 유효성 검사는 자동화할 수 없습니다.
학습 중에 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.
데이터 포인트 정의
먼저, 플롯에 사용할 데이터 포인트를 정의합니다. 이 예제에서는 numpy를 사용하여 사인파에 대한 x 및 y 값 집합을 생성합니다.
import matplotlib.pyplot as plt
import numpy as np
## define a list of markevery cases to plot
cases = [
None,
8,
(30, 8),
[16, 24, 32],
[0, -1],
slice(100, 200, 3),
0.1,
0.4,
(0.2, 0.4)
]
## data points
delta = 0.11
x = np.linspace(0, 10 - 2 * delta, 200) + delta
y = np.sin(x) + 1.0 + delta
선형 스케일로 플롯 생성
다음으로, markevery가 선형 스케일에서 어떻게 동작하는지 보여주기 위해 일련의 서브플롯을 생성합니다. cases 리스트를 반복하고 각 경우를 별도의 서브플롯에 플롯합니다. markevery 매개변수를 사용하여 표시할 데이터 포인트를 지정합니다.
## create plots with linear scales
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
로그 스케일로 플롯 생성
이전 단계를 반복하지만, 이번에는 로그 스케일을 사용합니다. 로그 스케일은 정수 기반의 서브샘플링 (subsampling) 에 대해 마커 거리에서 시각적인 비대칭성을 유발하는 반면, 분수 기반의 서브샘플링은 균등한 분포를 생성합니다.
## create plots with logarithmic scales
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.set_xscale('log')
ax.set_yscale('log')
ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
확대된 플롯 생성
이번에는 markevery가 확대된 플롯에서 어떻게 동작하는지 보여주기 위해 또 다른 일련의 서브플롯을 생성합니다. 정수 기반의 서브샘플링은 기본 데이터에서 포인트를 선택하며 뷰 (view) 와 독립적인 반면, 부동 소수점 기반의 서브샘플링은 Axes 대각선과 관련이 있으며 표시된 데이터 범위를 변경합니다.
## create zoomed plots
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
ax.set_xlim((6, 6.7))
ax.set_ylim((1.1, 1.7))
극좌표 플롯 생성
마지막으로, markevery가 극좌표 플롯에서 어떻게 동작하는지 보여주기 위해 일련의 서브플롯을 생성합니다. 동작은 선형 스케일과 유사합니다.
## create polar plots
r = np.linspace(0, 3.0, 200)
theta = 2 * np.pi * r
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained',
subplot_kw={'projection': 'polar'})
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.plot(theta, r, 'o', ls='-', ms=4, markevery=markevery)
요약
이 튜토리얼에서는 Matplotlib 에서 Line2D의 markevery 속성을 사용하여 데이터 포인트의 하위 집합에 마커를 그리는 방법을 배웠습니다. 정수, 튜플, 리스트, 슬라이스 및 부동 소수점을 사용하는 등 마커를 지정하는 다양한 방법을 살펴보았습니다. 또한 markevery가 선형 및 로그 스케일, 확대 및 극좌표 플롯에서 어떻게 동작하는지 확인했습니다.