메모
전체 예제 코드를 다운로드 하려면 여기 를 클릭 하십시오.
축 상자 양상 #
이 데모는 를 통해 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()
정사각형 쌍축 #
트윈 축으로 정사각형 축을 생성합니다. 트윈 축은 부모의 상자 측면을 대신합니다.
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초)