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

Matplotlib에서 정사각형이 아닌 Seaborn 조인트플롯(Jointplot) 그리는 방법

Seaborn의 조인트플롯(jointplot) 또는 조인트그리드(JointGrid)를 정사각형이 아닌 직사각형 형태로 그리고 싶다면, set_figwidth()set_figheight() 메서드를 활용하면 됩니다.

조인트플롯은 내부적으로 자체 Figure를 생성하기 때문에 일반적인 방식으로는 크기가 쉽게 조절되지 않습니다. 이때 생성된 조인트플롯 객체의 fig 속성에 접근하여 너비와 높이를 개별적으로 지정하면 원하는 비율의 플롯을 얻을 수 있습니다.

구현 단계

  • Figure 크기를 설정하고, 서브플롯 사이 및 주변 여백(padding)을 자동으로 조정합니다.
  • NumPy를 사용하여 x, y 데이터 포인트를 생성합니다.
  • 두 개의 열(x, y)을 가진 Pandas 데이터프레임을 만듭니다.
  • jointplot() 메서드를 호출하여 조인트플롯을 그립니다.
  • 정사각형이 아닌 형태로 만들기 위해 set_figwidth()set_figheight()로 너비와 높이를 각각 설정합니다.
  • show() 메서드로 최종 그림을 화면에 표시합니다.

예제 코드

import seaborn as sns
import numpy as np
from matplotlib import pyplot as plt
import pandas as pd

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# 난수 데이터 생성
X = np.random.randn(1000,)
Y = 0.2 * np.random.randn(1000) + 0.5

# 데이터프레임 생성
df = pd.DataFrame(dict(x=X, y=Y))

# 조인트플롯 생성
jp = sns.jointplot(x="x", y="y", data=df, height=3.5,
                   joint_kws={'color': 'red'})

# 너비와 높이를 개별적으로 설정하여 직사각형 형태로 변경
jp.fig.set_figwidth(7.50)
jp.fig.set_figheight(3.50)

plt.show()

코드 설명

위 예제에서는 평균 0, 표준편차 1을 따르는 정규분포 난수 1,000개를 x축 데이터로, x값에 종속된 y축 데이터를 함께 생성했습니다. sns.jointplot() 호출 시 joint_kws 인자에 색상을 지정하여 산점도를 빨간색으로 표현했으며, 기본 높이는 3.5로 설정했습니다.

핵심은 마지막 부분입니다. jp.fig.set_figwidth(7.50)jp.fig.set_figheight(3.50)를 통해 그림의 너비를 높이의 약 두 배 이상으로 늘려, 정사각형이 아닌 가로로 긴 직사각형 조인트플롯을 완성할 수 있습니다.

실행 결과

코드를 실행하면 중앙에는 빨간색 산점도가, 상단과 우측에는 각 변수의 분포를 보여주는 히스토그램이 함께 표시되며, 전체 그림은 가로로 긴 직사각형 형태로 출력됩니다.