축 상자 양상 #

이 데모는 를 통해 Axes 상자의 aspect를 직접 설정하는 방법을 보여줍니다 set_box_aspect. 상자 종횡비는 데이터 제한과 관계없이 물리적 단위의 축 높이와 축 너비 사이의 비율입니다. 이것은 예를 들어 포함된 데이터와 관계없이 정사각형 플롯을 생성하거나 고정된 (데이터) 측면을 가진 이미지 플롯 옆에 동일한 축 치수를 가진 일반적인 플롯을 갖는 데 유용합니다.

다음은 set_box_aspect.

데이터와 무관한 정사각형 축 #

데이터 제한에 관계없이 정사각형 축을 생성합니다.

import numpy as np
import matplotlib.pyplot as plt

fig1, ax = plt.subplots()

ax.set_xlim(300, 400)
ax.set_box_aspect(1)

plt.show()
축 상자 측면

공유 정사각형 축 #

크기가 제곱인 공유 서브플롯을 생성합니다.

fig2, (ax, ax2) = plt.subplots(ncols=2, sharey=True)

ax.plot([1, 5], [0, 10])
ax2.plot([100, 500], [10, 15])

ax.set_box_aspect(1)
ax2.set_box_aspect(1)

plt.show()
축 상자 측면

정사각형 쌍축 #

트윈 축으로 정사각형 축을 생성합니다. 트윈 축은 부모의 상자 측면을 대신합니다.

fig3, ax = plt.subplots()

ax2 = ax.twinx()

ax.plot([0, 10])
ax2.plot([12, 10])

ax.set_box_aspect(1)

plt.show()
축 상자 측면

이미지 옆의 일반 플롯 #

고정 데이터 측면과 adjustable="box"일반 플롯 옆의 기본값으로 이미지 플롯을 만들 때 축의 높이가 같지 않습니다. set_box_aspect일반 플롯의 축이 이미지 치수를 상자 측면으로 사용하도록 허용하여 이에 대한 쉬운 솔루션을 제공합니다.

이 예는 또한 constrained_layout고정된 상자 측면과 잘 상호 작용하는 것을 보여줍니다.

fig4, (ax, ax2) = plt.subplots(ncols=2, constrained_layout=True)

np.random.seed(19680801)  # Fixing random state for reproducibility
im = np.random.rand(16, 27)
ax.imshow(im)

ax2.plot([23, 45])
ax2.set_box_aspect(im.shape[0]/im.shape[1])

plt.show()
축 상자 측면

스퀘어 조인트/마진 플롯 #

공동 데이터 플롯 옆에 주변 분포를 표시하는 것이 바람직할 수 있습니다. 다음은 그리드 사양의 너비 및 높이 비율과 동일한 주변 축의 상자 측면을 사용하여 정사각형 플롯을 만듭니다. 이렇게 하면 그림의 크기에 관계없이 모든 축이 완벽하게 정렬됩니다.

fig5, axs = plt.subplots(2, 2, sharex="col", sharey="row",
                         gridspec_kw=dict(height_ratios=[1, 3],
                                          width_ratios=[3, 1]))
axs[0, 1].set_visible(False)
axs[0, 0].set_box_aspect(1/3)
axs[1, 0].set_box_aspect(1)
axs[1, 1].set_box_aspect(3/1)

np.random.seed(19680801)  # Fixing random state for reproducibility
x, y = np.random.randn(2, 400) * [[.5], [180]]
axs[1, 0].scatter(x, y)
axs[0, 0].hist(x)
axs[1, 1].hist(y, orientation="horizontal")

plt.show()
축 상자 측면

스퀘어 조인트/마진 플롯 #

상자 측면을 설정할 때 여전히 데이터 측면도 설정할 수 있습니다. 여기서 우리는 높이가 두 배인 상자를 가진 Axes를 생성하고 그 내용에 대해 "동일한" 데이터 측면을 사용합니다. 즉, 원은 실제로 원형을 유지합니다.

fig6, ax = plt.subplots()

ax.add_patch(plt.Circle((5, 3), 1))
ax.set_aspect("equal", adjustable="datalim")
ax.set_box_aspect(0.5)
ax.autoscale()

plt.show()
축 상자 측면

많은 서브플롯에 대한 박스 애스펙트 #

초기화 시 상자 측면을 Axes로 전달할 수 있습니다. 다음은 모든 정사각형 축이 있는 2 x 3 서브플롯 그리드를 생성합니다.

fig7, axs = plt.subplots(2, 3, subplot_kw=dict(box_aspect=1),
                         sharex=True, sharey=True, constrained_layout=True)

for i, ax in enumerate(axs.flat):
    ax.scatter(i % 3, -((i // 3) - 0.5)*200, c=[plt.cm.hsv(i / 6)], s=300)
plt.show()
축 상자 측면

참조

다음 함수, 메서드, 클래스 및 모듈의 사용이 이 예제에 표시됩니다.

스크립트의 총 실행 시간: ( 0분 2.779초)

Sphinx-Gallery에서 생성한 갤러리