💡 Google Colab에서 작업한다면 해당 라이브러리들을 따로 설치할 필요가 없지만, 업데이트가 필요할 수 있다.

%pip install --upgrade plotly

Matplotlib

Matplotlib(맷플롯립)

  • 정적인 이미지 형식의 그래프를 만드는 파이썬 라이브러리로, Pandas와 잘 맞는다.
  • 그래프의 세부 요소를 세밀하게 제어할 수 있어 보고서, 논문 등에 사용
  • Matplotlib cheatsheets and handouts에서 요약본 pdf 다운로드
pip install matplotlib            # 터미널에서 설치
import matplotlib.pyplot as plt


GRAPHS

💡 여러 개의 열(판다스 데이터프레임)을 한 차트에 표시하려면 for문으로 원하는 횟수만큼 차트 생성 메소드 호출

# e.g. 다중 선형 차트 생성
for column in df.columns:
    plt.plot(df.index, df[column], linewidth=2, label=df[column].name)


💡 단위가 다른 두 개의 개별 축을 한 차트에 표시하기

  1. plt.gca() 으로 현재 활성화된 축(subplot) 가져오기(변수에 저장하여 1번째 Axes 객체 생성)
  2. 1번째 Axes와 동일한 x축을 공유하면 Axes.twinx(), 동일한 y축을 공유하면 Axes.twiny() 으로 2번째 Axes 생성
  3. 두 개의 축에 대해 각각 차트 생성 메소드 차트 호출
# e.g. 동일한 x축을 공유하는 두 y축
ax1 = plt.gca()                # gca = Get Current Axes
ax2 = ax1.twinx()

ax1.plot(x-data, y-data-a)     # 공유하는 축은 똑같이 설정
ax2.plot(x-data, y-data-b)


💡 서로 다른 타입의 차트를 한 차트에 겹쳐서 표시할 수 있다.

pyplot.plot()

  • 꺾은선형 차트 생성
  • 현재 활성화된 가로(x)축과 세로(y)축 순서대로 원하는 데이터 전달
  • 차트를 스타일링하려면 먼저 스타일 지정 후, plot 함수로 차트 생성
  • 파라미터
    • linewidth: 선 굵기 지정
    • label: 선에 이름 붙이기
    • color: 선 색상 지정
    • linewidth: 선 굵기 지정
    • linestyle: 선 스타일 지정
      • 'solid' 또는 '-' → ───────
      • 'dashed' 또는 '--' → ── ── ──
      • 'dotted' 또는 ':' → ············
      • 'dashdot' 또는 '-.' → ─·─·─·─·─·
      • 'None' 또는 '' → (선 없음)
    • marker: 선이 꺾이는 지점을 표시하는 도형 스타일 지정
      • '.' → •
      • ',' → ·
      • 'o' → ●
      • 's' → ■
      • '^' → ▲
      • 'v' → ▼
      • '<' → ◀
      • '>' → ▶
      • 'x' → ×
      • 'None' 또는 '' → (마커 없음)

pyplot.scatter()

  • 점을 찍어 각 데이터의 값을 나타내는 산점도 차트 생성
  • 현재 활성화된 가로(x)축과 세로(y)축 순서대로 원하는 데이터 전달
  • 파라미터
    • alpha: 점의 투명도(중첩된 데이터의 시각화를 용이하게 만들기)
    • size: 점의 사이즈

pyplot.bar()

  • 막대 차트 생성
  • 현재 활성화된 가로(x)축과 세로(y)축 순서대로 원하는 데이터 전달

pyplot.show()

  • 차트 생성 메소드를 호출한 위치의 바로 아래에 차트를 표시(현재까지 그려진 모든 플롯의 결과를 화면에 출력)
  • 주피터와 같은 대화형 노트북이 아닌 곳에서 차트 생성시 유용하다.

pyplot.imshow()

  • 이미지 데이터를 시각화하여 플롯에 그리는 역할
  • 파라미터
    • cmap: 컬러 맵을 지정(e.g. gray는 색상 팔레트를 그레이스케일로 설정해서 흑백 이미지 출력)



STYLE

pyplot.title()

  • 차트 제목 설정

pyplot.figure()

  • 차트 사이즈 조정
  • 파라미터
    • figsize: (너비, 높이) 값을 튜플로 전달
    • dpi: 해상도 조절

pyplot.grid()

  • 차트 위에 회색 격자를 겹쳐서 표시
  • 파라미터
    • color: 격자선 색 지정
    • linestyle: 격자선 스타일 지정

pyplot.xticks(), pyplot.yticks()

  • x축, y축을 구성
  • 파라미터
    • ticks:
      • x축, y축 눈금의 위치(빈 리스트 전달 시 모든 눈금 제거)
      • NumPy의 .arange() 활용 가능(e.g. np.arange(1900, 2025, step=5))
    • fontsize: 눈금의 글자 크기 조절
    • rotation: 눈금의 글자 기울기 조절(글씨가 길어서 서로 겹칠 경우 기울기 조정으로 해결 가능)

pyplot.xlabel(), pyplot.ylabel()

  • 현재 활성화된 x축, y축에 제목 추가
  • 파라미터
    • fontsize: 글자 크기 조절
    • color: 글자 색상 지정

pyplot.xlim(), pyplot.ylim()

  • x축, y축의 상한 및 하한 설정(e.g. 값이 음수가 될 수 없는 경우 최저를 0으로 설정)
  • 첫 번째 파라미터는 하한값, 두 번째 파라미터는 상한값

Axes.set_xlabel(), Axes.set_ylabel()

  • 현재 활성화된 축이 아닌 특정 Axes 객체의 x축, y축에 제목을 추가
  • 한 차트에서 여러 축을 표시해야 할 때 사용

Axes.invert_xaxis(), Axes.invert_yaxis()

  • x축, y축을 반전(작은 값→큰 값에서 큰 값→작은 값으로 순서 변경)

SETTINGS

.legend()

  • 각 데이터 시리즈의 레이블을 수집하여 범례를 생성
  • 그래프 오른쪽 위(기본값)에 각 라인의 색상, 이름과 함께 표시됨
  • 파라미터
    • fontsize: 글자 크기 조절
    • handles:
      • 범례에 표시하고 싶은 객체만 리스트로 전달
      • plot 객체가 반환하는 튜플에서 첫 번째 값(선, 점 등 그래프에 보여질 객체)만 handles에 전달됨
          ...
        
          black_line, = plt.plot( ... )    # 라인 객체 1 저장(, = 으로 반환값의 첫 번째 값만 저장)
          white_line, = plt.plot( ... )    # 라인 객체 2 저장(같은 축에 선을 하나 더 그림)
        
          plt.legend(handles=[black_line, white_line], fontsize=18)
          plt.show()
        
      • .legend()로 자동 생성하는 범례보다 더 세밀하게 제어할 수 있고, 생성한 객체에서 속성 변경으로 스타일을 관리할 수 있다.

.dates

  • 맷플롯립의 날짜 표시 기능을 담당
  • 차트의 축을 보기 쉽게 큰 눈금과 작은 눈금을 추가하는 로케이터를 추가할 수 있다.

import matplotlib.dates as mdates

years = mdates.YearLocator()              # 연도를 찾는 로케이터
months = mdates.MonthLocator()            # 월을 찾는 로케이터
years_fmt = mdates.DateFormatter('%Y')    # 날짜를 표시하는 방식을 지정(e.g. '%Y'는 연도를 2025로 표시)



Plotly

Plotly(플로틀리)
Zoom, Pan, Hover, Toggle 등을 수행할 수 있는 대화형 그래프를 생성하는 파이썬 라이브러리

pip install plotly             # 터미널에서 설치
pip install ipywidgets         # 주피터 노트북에서 사용할 경우 그래프를 제대로 표시하기 위해 권장
import plotly.express as px


GRAPHS

express.bar()

  • Pandas DataFrame을 기반으로 간단하고 빠르게 막대 차트 생성
  • 파라미터
    • title: 차트 제목
    • data_frame: 데이터프레임 또는 딕셔너리(생략 가능)
    • x: x축 데이터(카테고리 이름)
    • y: y축 데이터(수치형 데이터)
    • color: 색상으로 데이터를 구분하여 보여줄 열(한 막대를 값에 따라 여러 색깔로 분할할 수 있음)
    • color_continuous_scale: 값에 따라 변하는 색상 스케일 설정
    • orientation: 막대 방향 지정('v'는 세로, ‘h’`는 가로)
    • barmode: 막대의 표시 방식(e.g. 'group'은 한 카테고리에 대한 여러 데이터가 옆에 나란히 배치됨)
    • width, height: 차트의 너비 및 높이(픽셀)
    • hover_name: 점 위에 마우스를 올릴 때 표시될 추가 정보

express.scatter()

  • Pandas DataFrame을 기반으로 간단하고 빠르게 산점도 차트 생성
  • 파라미터
    • title: 차트 제목
    • data_frame: 데이터프레임 또는 딕셔너리(생략 가능)
    • x: x축 데이터(카테고리 이름)
    • y: y축 데이터(수치형 데이터)
    • size: 각 점의 크기를 나타낼 수치형 데이터
    • color: 색상으로 데이터를 구별하여 보여줄 열
    • hover_name: 점 위에 마우스를 올릴 때 표시될 추가 정보

express.line()

  • Pandas DataFrame을 기반으로 간단하고 빠르게 선형 차트 생성
  • Line Charts in Python 참고
  • 파라미터
    • title: 차트 제목
    • data_frame: 데이터프레임 또는 딕셔너리(생략 가능)
    • x: x축 데이터(카테고리 이름)
    • y: y축 데이터(수치형 데이터)
    • color: 색상으로 데이터를 구별하여 보여줄 열(여러 개의 선을 한 차트에 표시할 수 있다.)

express.box()

  • Pandas DataFrame을 기반으로 간단하고 빠르게 상자 차트 생성
  • 파라미터
    • title: 차트 제목
    • data_frame: 데이터프레임 또는 딕셔너리(생략 가능)
    • x: x축 데이터(카테고리 이름)
    • y: y축 데이터(수치형 데이터)
    • color: 각 상자의 색상을 나타낼 데이터
    • notched: 상자 위아래에 홈 추가 여부(두 박스가 겹치는지 확인하거나 중앙값의 신뢰 구간 확인에 유용)
    • points: 이상치(outliers, 박스를 벗어난 데이터) 표시 방법(e.g. all은 모든 이상치를 점으로 표시)

express.histogram()

  • 히스토그램 생성
  • Histograms in Python 참고
  • 파라미터
    • title: 차트 제목
    • data_frame: 데이터프레임 또는 딕셔너리(생략 가능)
    • x: x축 데이터(카테고리 이름)
    • y: y축 데이터(수치형 데이터)
    • nbins: 히스토그램의 빈(bin)개수를 설정(e.g. 30일 경우 데이터를 30개의 구간으로 나눔)
    • color: 각 막대의 색상을 나타낼 데이터
    • opacity: 막대의 투명도 설정(겹치는 구간에서 투명하게 보여서 쉽게 구분할 수 있다.)
    • barmode: 막대의 표시 방식(e.g. 'overlay'는 한 카테고리에 대한 여러 데이터가 겹쳐서 표시됨)
    • histnorm: y축 값을 퍼센트로 정규화(수치가 크게 다른 값끼리 비교할 때 유용)
    • marginal: 차트 위나 옆에 추가적인 그래프 제공(e.g. 'box'는 박스 플롯 추가)

express.pie()

  • Pandas DataFrame을 기반으로 간단하고 빠르게 파이 차트 생성
  • 파라미터
    • title: 차트 제목
    • data_frame: 데이터프레임 또는 딕셔너리(생략 가능)
    • names: 데이터프레임의 열 이름을 사용하여 파이 조각에 이름을 지정
    • labels: 가독성을 위해 names보다 간결하거나 읽기 쉬운 이름을 리스트 또는 딕셔너리로 전달
    • values: 파이 조각의 크기(비율) 지정
    • hole: 차트 가운데 동그랗게 빈 공간을 추가하고 크기 조절(도넛 차트로 변경됨)
    • width, height: 차트의 너비 및 높이(픽셀)

express.sunburst()

  • Pandas DataFrame을 기반으로 간단하고 빠르게 햇살형 차트 생성
  • 계층적 데이터를 원형으로 시각화
    (e.g. 1번째 레벨: 'Region', 2번째 레벨: 'Country', 3번째 레벨: 'City', 각 섹션의 크기: 'Population')
  • Sunburst Charts in Python 참고
  • 파라미터
    • title: 차트 제목
    • data_frame: 데이터프레임 또는 딕셔너리(생략 가능)
    • path: 계층적 데이터의 열 이름을 리스트로 지정
    • values: 각 섹션의 크기를 결정하는 데이터
    • color 각 섹션의 색상을 나타낼 데이터

express.choropleth()

  • 지역 데이터를 시각화할 수 있는 색상 지도(choropleth map) 생성
  • Choropleth Maps in Python 참고
  • 파라미터
    • title: 차트 제목
    • data_frame: 데이터프레임 또는 딕셔너리(생략 가능)
    • locations: 지역을 나타내는 값이 저장된 열
    • locationmode: locations 값의 형식 지정
      • 'ISO-3': 3글자 ISO 국가 코드(기본값)
      • 'USA-states': 미국 주 이름
      • 'country names': 국가 이름
    • hover_name: 마우스를 올렸을 때 표시될 텍스트
    • hover_data: 마우스를 올렸을 때 추가로 표시할 데이터(열 이름들을 리스트로 전달 가능)
    • color: 각 지역의 색상을 나타낼 데이터

Figure.show()

  • 생성된 그래프 개체를 graph_objects로 표시


STYLE

💡 그래프 생성 메소드의 파라미터에 없는 부분을 구성하려면 먼저 그래프 객체를 만든 후 필요한 메소드 호출

Figure.update_traces()

  • trace는 그래프에서 데이터의 시각적 표현에 관련된 속성의 집합
  • 파라미터
    • textposition: 텍스트 위치 변경(e.g. 파이 차트 바깥 또는 안에 포함)
    • textinfo: 텍스트 표시 방법 변경(e.g. 레이블과 퍼센트의 조합)

Figure.update_layout()

  • 그래프의 전반적인 레이아웃 설정 변경
  • 파라미터
    • title: 그래프의 제목
    • xaxis_title: x축 제목
    • yaxis_title: y축 제목
    • xaxis: x축의 레이아웃 설정
      • {'categoryorder':'min ascending'}: 각 범주에서 가장 작은 값을 기준으로 범주를 오름차순 정렬
      • {'categoryorder':'max ascending'}: 각 범주에서 가장 큰 값을 기준으로 범주를 오름차순 정렬
    • yaxis: y축의 레이아웃 설정
      (e.g. dict(type="선형,로그,날짜,범주 등 스케일", showgrid="그리드 표시 여부"))
    • plot_bgcolor: 그래프의 배경색
    • paper_bgcolor: 전체 배경색
    • coloraxis_showscale: 그래프 생성 시 color_continuous_scale로 설정한 색상 스케일 축 표시 여부
    • legend: 범례의 레이아웃 설정
      (e.g. dict(title="제목", orientation="표시 방향", x=x축 위치, y=y축 위치, xanchor="위치 기준"))



Seaborn

Seaborn(씨본)
Matplotlib을 기반으로 한 파이썬 라이브러리로, 더 많은 기능과 세련된 디자인을 제공

pip install seaborn         # 터미널에서 설치
import seaborn as sns       # 관례적으로 sns라는 이름으로 임포트


GRAPHS

💡 한 차트에 여러 그래프를 그리려면 차트 생성 메소드를 원하는 만큼 호출

.scatterplot()

  • 산점도 차트 생성
  • 파라미터
    • data: 판다스 데이터프레임
    • x: x축 데이터로 사용할 열
    • y: y축 데이터로 사용할 열
    • hue: 지정한 값을 기준으로 점의 색상 결정(큰 값일수록 진한 색)
    • palette: hue의 색상 그라데이션을 변경할 컬러맵(colormap) 지정
    • size: 지정한 값을 기준으로 점의 크기 결정

.regplot()

  • 산점도 + 선형 회귀선(점들 사이의 선형 관계를 나타내는 직선)을 함께 표시하는 차트 생성
  • 파라미터
    • data: 판다스 데이터프레임
    • x: x축 데이터로 사용할 열
    • y: y축 데이터로 사용할 열
    • lowess:
      • Locally Weighted Scatterplot Smoothing의 약자
      • True로 설정하면 선형 회귀 대신 국소 회귀를 사용하여 더 부드럽고 자연스러운 추세선을 그릴 수 있다.
    • scatter_kws: 점의 스타일을 설정하는 딕셔너리
      • {'alpha': 투명도(0은 투명, 1은 불투명}
      • {'color': 색상}
      • {'s': 크기}
      • {'marker': 모양}
      • {'linewidth': 테두리 두께}
      • {'edgecolor': 테두리 색상}
    • line_kws: 회귀선의 스타일을 설정하는 딕셔너리
      • {'color': 색상}
      • {'alpha': 투명도}
      • {'linewidth': 두께}
      • {'linestyle': 스타일}

.lmplot()

  • .regplot()의 확장 형태로, 선형 회귀선이나 국소 회귀선에 대한 여러 조건 설정 가능
  • 파라미터
    • row: 지정된 열을 기준으로 서브플롯을 생성하여 행으로 배치(가로로 나열됨)
    • col: 지정된 열을 기준으로 서브플롯을 생성하여 열로 배치(세로로 나열됨)
    • aspect: 각 플롯의 가로 세로 비율 설정
    • hue: 색상으로 그룹을 구분할 열 지정(row, col처럼 서브플롯을 생성하지 않고 한 차트에 모두 표시)

.histplot()

  • 히스토그램 생성
  • 데이터를 구간(bin)으로 나누고 각 구간에 포함된 데이터의 개수를 막대로 표현
  • 파라미터
    • data: 판다스 데이터프레임
    • x: x축 데이터로 사용할 열(x축은 bins를 나타내고 y축은 해당 구간에 속한 데이터의 개수나 밀도가 됨)
    • bins: 데이터를 나누는 구간의 개수(데이터에 따라 적절히 설정해야 한다.)

.kdeplot()

  • 커널 밀도 추정(Kernel Density Estimation, KDE) 그래프 생성
  • 데이터의 분포를 부드러운 곡선 형태로 추정하는 데 사용
  • 파라미터
    • data: 판다스 데이터프레임
    • x: x축 데이터로 사용할 열
    • shade: True로 설정하면 각 분포 아래(곡선 안쪽)를 색으로 채운다(겹치는 영역 확인에 용이).
    • clip: x축 값의 범위를 제한(e.g. (0, 1)는 KDE 곡선을 0에서 1 사이의 범위로 제한)

.boxplot()

  • 박스 차트 생성
  • 구성 요소
    • Box: 데이터의 중앙 50%를 나타냄(박스의 상단은 세 번째 사분위수, 하단은 첫 번째 사분위수가 된다.)
    • Median: 박스 안의 가로선은 데이터의 중앙값(두 번째 사분위수)
    • Whiskers: 박스에서 벗어나는 선들은 데이터를 1.5배 IQR 범위 내로 확장한 부분
    • Outliers: 수염(Whiskers) 끝을 넘어서는 점들(원과 같은 기호로 표시)
  • 파라미터
    • data: 판다스 데이터프레임
    • x: x축 데이터로 사용할 열
    • y: y축 데이터로 사용할 열

STYLE

💡 Seaborn은 Matplotlib 기반이기 때문에 맷플롯립 레이어에서도 차트를 구성할 수 있다.
💡 차트 생성 메소드가 반환하는 맷플롯립의 Axes 객체를 구성하여 스타일 지정하기
💡 모든 차트가 아닌 특정 차트에만 스타일을 설정하려면 파이썬 with 키워드 사용

plt.figure(figsize=(8, 4), dpi=200)       # 1. 먼저 맷플롯립으로 차트 크기와 해상도 조절

with sns.axes_style('darkgrid'):          # (with 블록 내에서만 유효한 스타일 변경)
   ax = sns.scatterplot(data=df,             # 2. 씨본으로 Axes 객체 생성
                        x='column_a',
                        y='column_b')

   ax.set(ylim=(0, 100000),                  # 3. 맷플롯립 레이어에서 축 한계와 레이블 등 설정
          xlim=(0, 300000),
          xlabel='A',
          ylabel='B')

plt.show()                                   # 4. 맷플롯립으로 차트 출력   

.axes_style()

  • 차트의 전체적인 테마 변경
  • “darkgrid”, “whitegrid”, “dark”, “white”, “ticks” 중 선택



References
  1. Angela Yu, [Python 부트캠프 : 100개의 프로젝트로 Python 개발 완전 정복], Udemy, https://www.udemy.com/course/best-100-days-python/?couponCode=ST3MT72524
  2. [API Reference], https://matplotlib.org/stable/api/index.html
  3. [Python API reference for plotly], https://plotly.com/python-api-reference/
  4. [API reference], https://seaborn.pydata.org/api.html

Leave a comment