개발은 처음이라 개발새발

matplotlib 다양한 스타일 본문

파이썬/판다스

matplotlib 다양한 스타일

leon_choi 2022. 7. 3. 09:00
반응형

지난 편에서는 한글 폰트를 사용했을 때 발생하는 오류를 해결했습니다. 이번 시간에는 matplotlib에서 제공하는 다양한 스타일을 소개하고 그래프를 좀 더 꾸며보기로 하겠습니다. 우선 지난 편에 만들었던 그래플 다시 한번 보겠습니다.  

보게 되면 제목과 x,y축에 있는 한글들이 너무 작습니다. 그리고 연도들이 너무 붙어 있어 명확하게 무엇을 의미하는지 확인하기가 힘듭니다. 우선 이 3가지의 문제들을 해결해보겠습니다. 우선 연도부터 건드려보겠습니다. 숫자들이 붙어 있는 것은 크기를 줄여서 해결할 수도 있지만 그렇게 되면 너무 작아 안 보이는 것은 같겠죠. 이럴 때는 숫자의 각도를 변경해 해결할 수 있습니다. 그리고 표의 사이즈 크기를 키우는 것도 하나의 방법이니 모두 적용해보겠습니다. 

 

그래프의 크기를 키우는 것은 figure()함수를, x축에 있는 연도의 각도 변경은 xticks()함수를 활용해야 합니다. xticks() 함수에서 각도를 쓸때는 xticks(rotation = 각도)로 적어야 합니다. 그리고 폰트 크기를 키우기 위해서는 "size = 값"을 적어 키우면 됩니다. 그리고 plt.plot()함수 안에 marker = 'o'을 추가하면 꼭지점 부분에 동그라미 모양의 마커가 생깁니다. 그리고 markersize = 값 을 통해서 마커의 사이즈까지 키울 수 있습니다. 이제 코드를 적고 결과를 보겠습니다.

 

import pandas as pd
import matplotlib.pyplot as plt

#한글 처리
from matplotlib import font_manager, rc
font_path = "c:/windows/Fonts/malgun.ttf" #한글 폰트 경로
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family = font_name)

df = pd.read_excel('./시도별 전출입 인구수.xlsx', header=0)

df = df.fillna(method='ffill')

#print(df)

#서울에서 다른 지역으로 이동하는 인구수
mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시')

df_seoul = df[mask]
df_seoul = df_seoul.drop(['전출지별'], axis=1) #불필요한 전출지별 제게
df_seoul.rename({'전입지별':'전입지'}, axis=1, inplace=True) #컬럼명 변경
df_seoul.set_index('전입지', inplace=True) #인덱스 설정

print(df_seoul)

#t서울에서 경기도로 이동안 인구수만 추출
sr_one = df_seoul.loc['경기도']

#표사이즈 키우기
plt.figure(figsize=(14,5))

#x축 항목 세로로 만들기
plt.xticks(size = 10, rotation='vertical')

plt.plot(sr_one.index, sr_one.values, marker = 'o', markersize = 10) #x축, y축
plt.title('서울에서 경기도 인구 이동', size = 30)
plt.xlabel('연도', size = 20)
plt.ylabel('이동 인구수', size = 20)

#범례 표시
plt.legend(labels = ['서울 -> 경기'], loc='best',fontsize = 15)

plt.show()

plt.legend()함수를 통해 범례까지 표시하니 이제 좀 더 보기 쉬운 그래프가 됐습니다. 이제 그래프의 디자인을 완전히 새롭게 바꿔볼까 하는데요. matplotlib에서는 plt.style.use()를 통해 다양한 스타일을 만들 수 있습니다. 하지만 무슨 스타일이 있는지 알지 못하면 적을 수가 없죠. 이를 알아보기 위해서는 print(plt.style.avaliable)를 통해서 어떤 스타일이 있는지 확인할 수 있습니다.

 

*** plt 적용 스타일

['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-gallerynogrid', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']

 

저는 이 중에 ggplot를 사용해도록하겠습니다. 코드와 결과를 보겠습니다. 

import pandas as pd
import matplotlib.pyplot as plt

#한글 처리
from matplotlib import font_manager, rc
font_path = "c:/windows/Fonts/malgun.ttf" #한글 폰트 경로
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family = font_name)

df = pd.read_excel('./시도별 전출입 인구수.xlsx', header=0)

df = df.fillna(method='ffill')

#print(df)

#plt 적용스타일 확인
print(plt.style.available)

#서울에서 다른 지역으로 이동하는 인구수
mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시')

df_seoul = df[mask]
df_seoul = df_seoul.drop(['전출지별'], axis=1) #불필요한 전출지별 제게
df_seoul.rename({'전입지별':'전입지'}, axis=1, inplace=True) #컬럼명 변경
df_seoul.set_index('전입지', inplace=True) #인덱스 설정

print(df_seoul)

#t서울에서 경기도로 이동안 인구수만 추출
sr_one = df_seoul.loc['경기도']

#스타일 지정
plt.style.use('ggplot')

#표사이즈 키우기
plt.figure(figsize=(14,5))

#x축 항목 세로로 만들기
plt.xticks(size = 10, rotation='vertical')

plt.plot(sr_one.index, sr_one.values, marker = 'o', markersize = 10) #x축, y축
plt.title('서울에서 경기도 인구 이동', size = 30)
plt.xlabel('연도', size = 20)
plt.ylabel('이동 인구수', size = 20)

#범례 표시
plt.legend(labels = ['서울 -> 경기'], loc='best',fontsize = 15)

plt.show()

이렇게 해서 색다른 디자인의 그래프를 만들어봤습니다. 다음에는 그래프의 여러 옵션들에 대해 이야기해보도록하겠습니다. 

반응형