메모
전체 예제 코드를 다운로드 하려면 여기 를 클릭 하십시오.
화살표 가이드 #
플롯에 화살표 패치 추가.
화살표는 종종 플롯에 주석을 다는 데 사용됩니다. 이 자습서에서는 플롯의 데이터 제한이 변경될 때 다르게 동작하는 화살표를 플롯하는 방법을 보여줍니다. 일반적으로 플롯의 포인트는 "데이터 공간" 또는 "디스플레이 공간"에 고정될 수 있습니다. 데이터 제한이 변경되면 데이터 공간에 표시된 항목이 이동합니다. 예를 들어 산점도의 포인트가 있습니다. 데이터 제한이 변경될 때 표시 공간에 플롯된 항목은 정적 상태를 유지합니다. 예를 들어 그림 제목이나 축 레이블이 있습니다.
화살표는 이제부터 '앵커 포인트'라고 하는 시작점과 끝점 사이에 그려진 머리(그리고 아마도 꼬리)와 줄기로 구성됩니다. 여기에서는 데이터 또는 표시 공간에서 헤드 또는 앵커 포인트를 고정해야 하는지 여부에 따라 화살표를 그리는 세 가지 사용 사례를 보여줍니다.
디스플레이 공간에 고정된 머리 모양, 데이터 공간에 고정된 앵커 포인트
디스플레이 공간에 고정된 머리 모양 및 앵커 포인트
데이터 공간에 고정된 전체 패치
아래에 각 사용 사례가 차례로 표시됩니다.
디스플레이 공간에 고정된 머리 모양과 데이터 공간에 고정된 앵커 포인트 #
이는 플롯에 주석을 달고 플롯을 이동하거나 스케일링할 때 화살표의 모양이나 위치를 변경하지 않으려는 경우에 유용합니다.
이 경우 patches.FancyArrowPatch
.
축 제한이 변경되면 화살표 모양은 동일하게 유지되지만 앵커 포인트는 이동합니다.
[(0.0, 2.0), (0.0, 2.0)]
디스플레이 공간에 고정된 머리 모양 및 앵커 포인트 #
이는 플롯에 주석을 달고 플롯을 이동하거나 스케일링할 때 화살표의 모양이나 위치를 변경하지 않으려는 경우에 유용합니다.
이 경우 를 사용 하고 패치를 추가할 축이 patches.FancyArrowPatch
있는 키워드 인수를 전달합니다
transform=ax.transAxes
.ax
축 제한이 변경되면 화살표 모양과 위치는 동일하게 유지됩니다.
fig, axs = plt.subplots(nrows=2)
arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
mutation_scale=100,
transform=axs[0].transAxes)
axs[0].add_patch(arrow)
arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
mutation_scale=100,
transform=axs[1].transAxes)
axs[1].add_patch(arrow)
axs[1].set(xlim=(0, 2), ylim=(0, 2))
[(0.0, 2.0), (0.0, 2.0)]
데이터 공간에 고정된 머리 모양 및 앵커 포인트 #
이 경우 patches.Arrow
, 또는 patches.FancyArrow
(후자는 주황색임)을 사용합니다.
축 제한이 변경되면 화살표 모양과 위치가 변경됩니다.
FancyArrow
의 API는 상대적으로 어색하며 특히
length_includes_head=True
화살표 끝 이 화살표 시작에서 멀어지도록 전달해야 합니다. (녹색)에서 반환된 화살표 클래스이기 때문에 이 참조에만 포함됩니다 .(dx, dy)
Axes.arrow
fig, axs = plt.subplots(nrows=2)
arrow = mpatches.Arrow(x_tail, y_tail, dx, dy)
axs[0].add_patch(arrow)
arrow = mpatches.FancyArrow(x_tail, y_tail - .4, dx, dy,
width=.1, length_includes_head=True, color="C1")
axs[0].add_patch(arrow)
axs[0].arrow(x_tail + 1, y_tail - .4, dx, dy,
width=.1, length_includes_head=True, color="C2")
arrow = mpatches.Arrow(x_tail, y_tail, dx, dy)
axs[1].add_patch(arrow)
arrow = mpatches.FancyArrow(x_tail, y_tail - .4, dx, dy,
width=.1, length_includes_head=True, color="C1")
axs[1].add_patch(arrow)
axs[1].arrow(x_tail + 1, y_tail - .4, dx, dy,
width=.1, length_includes_head=True, color="C2")
axs[1].set(xlim=(0, 2), ylim=(0, 2))
[(0.0, 2.0), (0.0, 2.0)]
plt.show()
스크립트의 총 실행 시간: (0분 1.191초)