반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Seaborn
- 나혼자코딩
- 오늘도코드잇
- 코딩독학
- 행렬
- 판다스
- 유학생
- 코드잇 TIL
- SQL
- 런던
- 코드잇
- 데이터분석
- 영국석사
- 코드잇TIL
- 머신러닝
- CSS
- 결정트리
- 코딩공부
- sql연습문제
- 로지스틱회귀
- matplotlib
- HTML
- numpy
- 파이썬
- 다항회귀
- 경사하강법
- 선형회귀
- for반복문
- 코딩
- 윈도우함수
Archives
- Today
- Total
영국 척척석사 유학생 일기장👩🏻🎓
(데이터분석) matplotlib의 figure, axes, subplots의 개념 본문
728x90
반응형
지난 글에서 설명한 matplotlib에 이어
figure, axes, subplots에 대해 알아보겠습니다.
- 먼저, seaborn은 matplotlib을 기반으로 구축되었습니다.
- 알려드릴 내용은 seaborn에도 적용됩니다.
- 참고로, seaborn을 이용하면 더욱 간단하게 할 수 있습니다.
1. Figures, Axes, and Subplots
- 먼저, 데이터를 불러오겠습니다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('data/diamonds.csv')
df.shape
df.head(5)
1) Figure Objects
- 대부분은 matplotlib의 메인 라이브러리인 pyplot 함수를 사용합니다.
- pyplot은 plt로 불러옵니다.
- 어떤 차트를 작성하든지, 가장 먼저 생성되는 것은 figure 객체입니다.
- 예를 들어, 히스토그램을 작성한다면 히스토그램을 그릴 캔버스인 figure이 먼저 생성됩니다.
- 그 다음에 axes가 생성되고 마지막으로 그 axes위에 히스토그램을 그리는 것입니다.
plt.hist(data=df, x='x')
- 먼저, figure을 직접 생성해보겠습니다.
- figure생성과 관련된 정보를 확인하기 위해서 끝에 세미콜론을 붙이지 않겠습니다.
plt.figure(figsize=(4, 3))
- 즉, axes가 추가되지 않은 400x300픽셀 크기의 figure이 생성되었음을 알 수 있습니다.
- 이 figure 객체에서 axes의 위치를 정확히 지정할 수도 있습니다.
- figure을 만들고 나서 fig라는 객체에 저장한 다음 add_axes를 통해 axes의 위치를 정확히 지정할 수 있습니다.
- 그리고 그 위에 히스토그램을 작성할 수 있습니다.
- add_axes 함수는 세밀한 맞춤형 차트를 만들 때 유용하게 사용할 수 있습니다.
#Create a new figure
fig = plt.figure(figsize=(4, 3))
#The argument of add_axes represents the dimension [left(좌측여백), bottom(하단여백), width(가로길이), height(세로길이)] fo the new axes.
#All quantities are in fractions of figure width and height.
ax = fig.add_axes([.125, .125, .775, .755])
ax.hist(data=df, x='x');
2) Sub-plots
- 만약, figure 안에 두 개의 subplot을 만들고 싶다면 pyplot의 subplot메서드를 사용하면 됩니다.
- 이는 n개의 행과 m개의 열을 만들며 이 틀을 바탕으로 각 칸에서 차트를 만들 수 있습니다.
- 예를 들어, 네 개의 히스토그램이 존재하는 그리드를 만들고 싶다면 먼저 figure을 만든 다음 subplot을 호출하면 됩니다.
- 행과 열을 두 개식 지정한 다음 subplot1 만들어보겠습니다.
- 결과를 확인하는 차원에서 subplot2,3을 생성하지 않았습니다.
- 그 다음, 왼쪽 상단에 배치될 subplot1과 오른쪽 하단에 배치될 subplot4를 만들어보겠습니다.
#Resize the chart, and have two plots side-by-sids
#set a large figure size for subplots
plt.figure(figsize = [8, 5])
#histogram on left, example of too-large bin size
plt.subplot(2, 2, 1) #2행, 2열의 subplot 1 첫번째 요소
bins = np.arange(0, df['x'].max()+1/4, 1/4)
plt.hist(data=df, x='x', bins=bins);
#histogram on right, example of too-small bin size
plt.subplot(2, 2, 4) #2 row, 2 cols, subplot 4
bins = np.arange(0, df['x'].max()+1/4, 1/4)
plt.hist(data=df, x='x', bins=bins);
- 결과적으로, 네 개의 subplot을 추가할 수 있는 캔버스가 완성되었지만 subplot은 두 개만 생성되었습니다.
3) Axes Objects
- 특정한 축 객체를 원하는 대로 설정할 수도 있습니다.
- 먼저, pyplot을 바로 호출하면 어떻게 되는지 확인해보겠습니다.
- 히스토그램 함수를 호출하면서 pyplot을 바로 호출했고 이어서 x축 레이블을 설정하기 위해 pyplot을 바로 호출했습니다.
plt.hist(data=df, x='x')
plt.xlabel('My x axis title')
- 또는 pyplot함수 get current access(gca)를 사용해서 축 객체를 가져온 다음 access 함수인 set_xlabel을 사용해서 x축의 레이블을 직접 설정하는 방법도 있습니다.
- 결과는 위와 똑같고, 차이점은 호출 구문이 약간 다르다는 것 뿐입니다.
plt.hist(data=df, x='x');
ax = plt.gca()
ax.set_xlabel('My x axis title')
- 축을 직접 지정하면 편리한 이유는 여러 개의 subplot을 만들 때 각각을 개별적으로 설정 가능 즉, 여러 subplot을 순회할 필요가 없습니다.
- 예를 들어, pyplot함수 subplots 를 사용한다고 합시다(*s 주의)
- 이 경우에는 행, 열의 개수와 figure 크기를 직접 지정할 수 있습니다.
- 그 결과로 figure 객체와 axes 객체의 배열이 반환됩니다.
- 따라서 두 개의 subplot을 나란히 배치하고 싶다면 axes 객체를 seaborn 이나 matplotlib에 바로 전달해서 그에 대한 작업을 할 수 있습니다.
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 3))
sns.countplot(data=df, x='cut', color='tab:blue', ax=ax1)
sns.countplot(data=df, x='clarity', color='tab:red', ax=ax2)
- 한편 seaborn은 일반적으로 axes 객체를 반환합니다.
- 따라서 seaborn 차트를 만들 때 axes를 지정하지 않았다면 함수 호출을 통해 축을 가져온 다음 직접 레이블을 지정하거나 필요한 설정을 적용하는 등의 작업을 할 수 있습니다.
ax = sns.countplot(data=df, x='cut', color='tab:blue')
ax.set_xlabel('My x axis label!')
728x90
반응형
'코딩공부 > Data analysis' 카테고리의 다른 글
(데이터분석) seaborn, matplotlib으로 axis(축) 범위 변경 (0) | 2024.05.25 |
---|---|
(데이터분석) 불연속 데이터에서의 히스토그램, 막대그래프 나타내기 (0) | 2024.05.25 |
(데이터분석) seaborn과 matplotlib으로 히스토그램 나타내기 (0) | 2024.05.24 |
(데이터분석) matplotlib으로 원 그래프 작성하기 (0) | 2024.05.24 |
(데이터분석) seaborn의 절대도수와 상대도수 막대그래프 나타내기 (0) | 2024.05.24 |