기록하는삶
[파이썬/python] seaborn 그래프 기본 설정(한글깨짐 해결, 축 눈금 기울이기, 그래프 여러 개 한 번에 그리기) 본문
AI/파이썬(Python)
[파이썬/python] seaborn 그래프 기본 설정(한글깨짐 해결, 축 눈금 기울이기, 그래프 여러 개 한 번에 그리기)
mingchin 2021. 9. 22. 00:39728x90
반응형
1) 폰트 설정, 축 이름 한글화 가능하게, 스타일(darkgrid) 설정
import seaborn as sns
import matplotlib.pyplot as plt
plt.rc("font", family = "Malgun Gothic")
sns.set(font="Malgun Gothic",
rc={"axes.unicode_minus":False}, style='white')
2) 그래프 사이즈 설정
숫자를 바꿔가며 크기 조정 가능
# 그래프 사이즈 설정
plt.figure(figsize=(10, 7))
#또는
fig.set_size_inches(16,8)
3) x축, y축 설정
그래프에 대해 직접 설정하거나, plt.show()를 통해 그래프를 그리기 전에 축 정보를 설정할 수 있다.
이때 rotation = (각도)를 이용하면 눈금 이름을 기울일 수 있다.
# x축의 라벨링 없애기
[그래프명].set(xticklabels=[])
# 축 눈금, 이름 따로 설정하기
plt.xticks(ticks=[눈금 간격], labels=[눈금명], rotation=45)
plt.xlabel([x축 이름], fontsize=20)
4) 여러 그래프 한 번에 그리기
몇 개의 그래프를 그릴 지(m*n) 먼저 설정한 뒤, 각각의 그래프를 정의할 때 그 위치를 'ax=(축)[위치1][위치2]'로 지정해주면 된다.
# 2*2 개의 그래프 그리기
fig, ax = plt.subplots(nrows=2, ncols=2)
fig.set_size_inches(16,8)
# 각 그래프 정의 및 위치 지정
g_date1 = sns.lineplot(x=df['일자'], y=df["휴가자수"], ax=ax[0][0])
g_date2 = sns.lineplot(x=df['일자'], y=df['출장자수'], ax=ax[0][1])
g_date3 = sns.lineplot(x=df['일자'], y=df["시간외근무명령서승인건수"], ax=ax[1][0])
g_date4 = sns.lineplot(x=df['일자'], y=df['재택근무자수'], ax=ax[1][1])
plt.show()
(예시)
보스턴 데이터를 이용, iterator에서 항목의 인덱스와 항목을 튜플 형태로 반환하는 enumerate를 적절히 이용하면, 한 번에 여러 개의 그래프를 그려낼 수도 있다.
# 데이터 로드 및 준비
boston = load_boston()
bostonDF = pd.DataFrame(boston.data , columns = boston.feature_names)
bostonDF['PRICE'] = boston.target
# enumerate와 for문을 이용해 한 번에 여러 그래프 그리기
fig, axs = plt.subplots(figsize=(16,8) , ncols=4 , nrows=2)
lm_features = ['RM','ZN','INDUS','NOX','AGE','PTRATIO','LSTAT','RAD']
for i , feature in enumerate(lm_features):
row = int(i/4)
col = i%4
sns.regplot(x=feature , y='PRICE',data=bostonDF , ax=axs[row][col])
(예시)
if 문을 통해 반복해서 그리면서, 특정 부분에만 변화를 주는 것도 가능하다.
plt.figure(figsize=(20, 7))
xs = Korea['관찰일자'].tolist()
cnt = 0
# 이때 세 자리 숫자는 각각 [row/col/index]를 의미,
# 즉 152 = 하나의 row에 5개 col의 그래프 중 2번째 그래프
for i in range(151,156):
plt.subplot(i)
if(cnt == 4):
# 마지막 그래프만 'red'로 강조
plt.plot(X[cnt]['관찰일자'],X[cnt]['일별 확진자'],'r')
plt.xticks(ticks=xs, labels=xs, rotation=45)
plt.xlabel('{} 일별 확진자 수'.format(Y[cnt]),fontsize=20)
plt.locator_params(axis='x', nbins=len(xs)/60)
break;
plt.plot(X[cnt]['관찰일자'],X[cnt]['일별 확진자'])
plt.xticks(ticks=xs, labels=xs, rotation=45)
plt.xlabel('{} 일별 확진자 수'.format(Y[cnt]),fontsize=20)
plt.locator_params(axis='x', nbins=len(xs)/60)
cnt += 1
(예시)
아래처럼 크기가 다르게 그리는 것도 가능하다.
plt.figure(figsize = (10,10))
plt.subplot(221)
sns.countplot(x = [항목1], order=[항목 순서1])
plt.title('이름1')
plt.subplot(222)
sns.countplot(x = [항목2], order=[항목 순서2])
plt.title('이름2')
plt.subplot(212)
sns.countplot(x = [항목2], order=[항목 순서2])
plt.title('이름3')
plt.show()
(예시)
외에도 matplotlib의 내장모듈인 GridSpec을 이용하면 다양한 표현이 가능하다. 전체 도화지를 m*n으로 나눈 뒤, 일정 부분을 범위로 할당하는 방법이다.
from matplotlib.pyplot import figure as fig
import matplotlib.gridspec as gridspec
import seaborn as sns
plt.rcParams["figure.figsize"] = (20,10) # 사이즈 설정
gs = gridspec.GridSpec(2, 2) # 도화지 나누기
plt.subplot(gs[0, :]) # row 0에 col 1,2 모두 할당
sns.barplot(x=df_train['요일'], y=df_train['출장자수'])
plt.subplot(gs[1, 0]) # row 0, col 1
sns.barplot(x=df_train['요일'], y=df_train["시간외근무"])
plt.subplot(gs[1, 1]) # row 1, span all columns
g_day_of_week5 = sns.barplot(x=df_train['요일'], y=df_train['재택근무자수'])
(예시)
728x90
반응형
'AI > 파이썬(Python)' 카테고리의 다른 글
[파이썬/python] 머신러닝 데이터 분할(예비법, 교차검증) (0) | 2021.09.22 |
---|---|
[파이썬/python] 데이터분할(붓스트랩), 앙상블, Voting, 배깅(Bagging), 부스팅(Boosting) (2) | 2021.09.22 |
[파이썬/python] EDA 기본(datetime type 변경, 중복값 제거, Null값 확인, unique 확인, 날짜정보 type변경, 히트맵) (0) | 2021.09.22 |
[파이썬/python] 데이터 전처리(원핫인코딩_One-hot Encoding, 정규화, 표준화) (0) | 2021.09.22 |
[파이썬/python] 정규표현식을 이용해 괄호와 괄호 안의 내용 삭제하기 (2) | 2021.09.13 |