[Python] 파이썬 Matplotlib로 간단한 그래프 그리기
- Developer/Python
- 2025. 3. 17.
복잡한 코드 없이도 데이터를 시각적으로 표현하고 싶은가? Matplotlib이 해답이다.
안녕하세요. 오늘은 파이썬 데이터 시각화의 기본이라 할 수 있는 Matplotlib 라이브러리에 대해 이야기해 보려고 합니다. 아무리 좋은 데이터와 분석 결과가 있어도 이를 제대로 시각화하지 못하면 그 가치는 반감됩니다. Matplotlib은 파이썬에서 가장 기본적이고 널리 사용되는 시각화 라이브러리로, 이것만 알아도 대부분의 기본 그래프는 그릴 수 있습니다. 복잡한 것 없이 실용적인 접근으로 시작해 보겠습니다.

목차
Matplotlib 소개 및 설치
Matplotlib은 2003년 John Hunter가 MATLAB의 그래픽 기능을 파이썬에서 구현하기 위해 개발한 라이브러리다. 현재는 NumPy, Pandas 등과 함께 데이터 과학 분야의 핵심 라이브러리로 자리 잡았다. 단순한 2D 플롯부터 복잡한 3D 시각화까지 다양한 그래프를 그릴 수 있지만, 인터페이스가 직관적이지 않고 기본 스타일이 미적으로 아쉬운 부분이 있다. 그럼에도 불구하고 커스터마이징 옵션이 매우 풍부하고 다른 라이브러리들이 대부분 Matplotlib을 기반으로 만들어졌기 때문에, 데이터 시각화를 배우려면 반드시 알아야 하는 라이브러리다.
설치는 pip를 통해 간단히 할 수 있다:
pip install matplotlib
설치 후에는 다음과 같이 import하여 사용한다:
import matplotlib.pyplot as plt
import numpy as np # 데이터 생성을 위해 NumPy도 함께 사용
기본 그래프 유형 (선 그래프, 막대 그래프, 산점도)
Matplotlib으로 그릴 수 있는 기본 그래프 유형은 매우 다양하다. 여기서는 가장 많이 사용되는 세 가지 유형을 살펴보자. 각 그래프 유형은 특정 종류의 데이터를 효과적으로 표현하기에 적합하다.
그래프 유형 | 주요 함수 | 적합한 데이터 유형 | 예시 코드 |
---|---|---|---|
선 그래프 (Line Plot) | plt.plot() | 시계열 데이터, 연속적인 변화 | plt.plot(x, y) |
막대 그래프 (Bar Plot) | plt.bar() | 범주형 데이터, 비교 | plt.bar(x, height) |
산점도 (Scatter Plot) | plt.scatter() | 두 변수 간의 관계, 상관관계 | plt.scatter(x, y) |
히스토그램 (Histogram) | plt.hist() | 분포, 빈도 | plt.hist(x, bins=10) |
파이 차트 (Pie Chart) | plt.pie() | 비율, 구성 비교 | plt.pie(sizes) |
이제 기본적인 선 그래프를 생성하는 예제를 살펴보자:
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성
x = np.linspace(0, 10, 100) # 0부터 10까지 100개의 균등한 간격의 점
y = np.sin(x) # 사인 함수 값
# 그래프 그리기
plt.plot(x, y)
plt.title('사인 함수 그래프')
plt.xlabel('x 값')
plt.ylabel('y 값')
plt.grid(True) # 그리드 표시
plt.show() # 그래프 표시
그래프 커스터마이징 (색상, 스타일, 레이블)
기본 그래프는 대개 심미적으로 만족스럽지 않다. Matplotlib은 그래프의 모든 요소를 세부적으로 커스터마이징할 수 있는 다양한 옵션을 제공한다. 색상, 선 스타일, 마커, 폰트, 레이블 등 거의 모든 것을 변경할 수 있다.
그래프 커스터마이징을 위한 주요 요소는 다음과 같다:
- 색상 (color): 'r', 'g', 'b'와 같은 약어나 '#FF0000'과 같은 HEX 코드, 'red', 'green'과 같은 이름으로 지정할 수 있다.
- 선 스타일 (linestyle): '-', '--', '-.', ':'과 같은 스타일로 지정할 수 있다.
- 마커 (marker): 'o', 's', '^', '*' 등으로 데이터 포인트를 표시할 수 있다.
- 레이블 (label): legend()를 사용해 그래프에 범례를 추가할 수 있다.
- 폰트 (font): title, xlabel, ylabel 등의 텍스트 스타일을 변경할 수 있다.
아래 예제는 기본 선 그래프를 다양한 옵션으로 커스터마이징하는 방법을 보여준다:
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 그래프 스타일 설정
plt.style.use('seaborn-darkgrid') # 미리 정의된 스타일 사용
# 그래프 크기 설정
plt.figure(figsize=(10, 6))
# 두 개의 선 그래프 그리기
plt.plot(x, y1, color='#FF5733', linestyle='-', linewidth=2, marker='o',
markersize=6, markevery=10, label='sin(x)')
plt.plot(x, y2, color='#3498DB', linestyle='--', linewidth=2, marker='s',
markersize=6, markevery=10, label='cos(x)')
# 제목과 축 레이블 설정
plt.title('사인 & 코사인 함수', fontsize=16, fontweight='bold')
plt.xlabel('x 값', fontsize=12)
plt.ylabel('y 값', fontsize=12)
# 그리드 설정
plt.grid(True, linestyle='--', alpha=0.7)
# 범례 표시
plt.legend(loc='best', fontsize=10)
# 축 범위 설정
plt.xlim(0, 10)
plt.ylim(-1.5, 1.5)
# 그래프 표시
plt.tight_layout() # 레이아웃 자동 조정
plt.show()
Matplotlib에는 다양한 내장 스타일이 있어 `plt.style.use()`로 간단히 그래프의 전체적인 모양을 바꿀 수 있다. 사용 가능한 스타일 목록은 `plt.style.available`로 확인할 수 있다. 인기 있는 스타일로는 'ggplot', 'seaborn', 'dark_background', 'bmh' 등이 있다. 개인적으로는 'seaborn-darkgrid'나 'ggplot'을 추천한다. 기본 스타일보다 훨씬 보기 좋은 그래프를 만들 수 있다.
여러 그래프 동시에 표시하기 (Subplots)
복잡한 데이터 분석을 할 때는 종종 여러 그래프를 한 번에 표시해야 하는 경우가 있다. Matplotlib의 subplot 기능을 사용하면 여러 그래프를 격자 형태로 배치할 수 있다. 이를 통해 여러 변수 간의 관계를 한 눈에 파악하거나 다른 시각화 방법으로 같은 데이터를 표현할 수 있다.
subplot을 만드는 방법에는 두 가지가 있다:
plt.subplot(nrows, ncols, index)
- 전통적인 방식으로, 행의 수, 열의 수, 그리고 현재 그래프의 인덱스를 지정한다.fig, axs = plt.subplots(nrows, ncols)
- 객체 지향적 방식으로, 더 많은 유연성을 제공한다.
아래 예시는 2x2 격자에 4개의 다른 그래프를 배치하는 방법을 보여준다:
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.exp(-x/3)
y4 = x**2/30
# 2x2 서브플롯 생성
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
# 첫 번째 서브플롯 (0, 0) - 선 그래프
axs[0, 0].plot(x, y1, 'r-')
axs[0, 0].set_title('사인 함수')
axs[0, 0].set_xlabel('x')
axs[0, 0].set_ylabel('sin(x)')
axs[0, 0].grid(True)
# 두 번째 서브플롯 (0, 1) - 코사인 그래프
axs[0, 1].plot(x, y2, 'b--')
axs[0, 1].set_title('코사인 함수')
axs[0, 1].set_xlabel('x')
axs[0, 1].set_ylabel('cos(x)')
axs[0, 1].grid(True)
# 세 번째 서브플롯 (1, 0) - 지수 감소 함수
axs[1, 0].plot(x, y3, 'g-.')
axs[1, 0].set_title('지수 감소 함수')
axs[1, 0].set_xlabel('x')
axs[1, 0].set_ylabel('exp(-x/3)')
axs[1, 0].grid(True)
# 네 번째 서브플롯 (1, 1) - 이차 함수
axs[1, 1].plot(x, y4, 'm:')
axs[1, 1].set_title('이차 함수')
axs[1, 1].set_xlabel('x')
axs[1, 1].set_ylabel('x²/30')
axs[1, 1].grid(True)
# 레이아웃 조정
plt.tight_layout()
plt.show()
subplot을 사용할 때는 plt.tight_layout()
을 추가하는 것이 중요하다. 이 함수는 그래프 간의 간격을 자동으로 조정하여 레이블이 겹치지 않도록 해준다. 대부분의 실수는 이 부분을 빼먹어서 그래프 레이블이 서로 겹치는 경우다.
그래프 저장 및 내보내기
그래프를 만든 후에는 이를 파일로 저장하여 보고서, 논문, 프레젠테이션 등에 사용할 수 있다. Matplotlib은 다양한 형식으로 그래프를 저장할 수 있는 기능을 제공한다. 가장 많이 사용되는 형식은 PNG, JPG, SVG, PDF 등이다.
파일 형식 | 특징 | 적합한 용도 | 코드 예시 |
---|---|---|---|
PNG | 무손실 압축, 래스터 이미지 | 웹, 보고서, 투명도 필요시 | plt.savefig('graph.png', dpi=300) |
JPG/JPEG | 손실 압축, 더 작은 파일 크기 | 웹, 사진이 많은 그래프 | plt.savefig('graph.jpg', quality=95) |
SVG | 벡터 그래픽, 크기 조정 가능 | 논문, 확대 필요, 편집 필요시 | plt.savefig('graph.svg') |
인쇄용 벡터 형식, 다중 페이지 | 논문, 출판물, 인쇄 품질 | plt.savefig('graph.pdf') | |
EPS | PostScript 기반 벡터 | LaTeX 문서, 학술 출판 | plt.savefig('graph.eps') |
그래프를 저장할 때 중요한 요소는 해상도(DPI)다. 화면 표시용 기본값인 100 DPI는 인쇄나 출판에는 충분하지 않다. 인쇄나 출판용으로는 최소 300 DPI 이상을 권장한다. 다음은 고해상도 PNG 파일로 그래프를 저장하는 예제다:
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성 및 그래프 그리기
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.figure(figsize=(8, 6))
plt.plot(x, y, 'b-', linewidth=2)
plt.title('사인 함수 그래프')
plt.xlabel('x 값')
plt.ylabel('y 값')
plt.grid(True)
# 투명한 배경 없이 그래프 저장
plt.savefig('sin_function_opaque.png', dpi=300, bbox_inches='tight')
# 투명한 배경으로 그래프 저장
plt.savefig('sin_function_transparent.png', dpi=300, transparent=True, bbox_inches='tight')
# 벡터 형식으로 저장
plt.savefig('sin_function.svg', bbox_inches='tight')
plt.savefig('sin_function.pdf', bbox_inches='tight')
bbox_inches='tight'
파라미터는 그래프 주변의 여백을 최소화하여 시각적으로 더 좋은 결과를 제공한다. 특히 논문이나 보고서에 삽입할 때 유용하다.
실전 활용 팁과 자주 하는 실수
Matplotlib를 사용하다 보면 흔히 부딪히는 문제들과 이를 해결하는 방법, 그리고 효율적인 사용을 위한 팁들을 알아보자.
자주 하는 실수와 해결법
-
레이블 겹침: 여러 그래프를 하나의 창에 표시할 때 자주 발생한다.
plt.tight_layout()
이나fig.subplots_adjust()
를 사용해 해결할 수 있다. -
한글 깨짐: 기본 폰트가 한글을 지원하지 않아 발생한다.
plt.rcParams['font.family'] = 'Malgun Gothic'
과 같이 한글 폰트를 지정해 해결할 수 있다. -
낮은 해상도: 그래프가 흐릿하게 보인다면
plt.figure(figsize=(10, 6), dpi=100)
와 같이 DPI 값을 높이거나 figsize를 조절해보자. -
그래프가 나타나지 않음:
plt.show()
를 호출하지 않았거나, 그래프가 그려지기 전에 다른plt.figure()
가 호출되었을 수 있다. - 데이터 형식 오류: 그래프에 잘못된 데이터가 전달되면 에러가 발생한다. 데이터 타입과 차원을 항상 확인하자.
효율적인 사용을 위한 팁
- 스타일 설정 재사용: 유사한 스타일의 그래프를 여러 개 만들 때는 스타일 설정을 함수로 만들어 재사용하자.
-
Jupyter Notebook과 함께 사용:
%matplotlib inline
또는%matplotlib notebook
명령어를 사용하면 노트북 내에서 그래프를 바로 볼 수 있다. -
객체 지향 인터페이스 사용:
plt
대신fig, ax = plt.subplots()
와 같은 객체 지향 인터페이스를 사용하면 더 복잡한 그래프를 쉽게 다룰 수 있다. -
대화형 모드 활용:
plt.ion()
을 사용하면 대화형 모드가 활성화되어plt.show()
없이도 그래프가 표시된다. - Seaborn 라이브러리 고려: 보다 아름다운 통계 시각화가 필요하다면 Matplotlib을 기반으로 하는 Seaborn 라이브러리를 고려해보자.
Matplotlib에서 한글을 사용할 때 글자가 깨지는 문제가 자주 발생한다. 다음 코드를 사용하면 대부분의 경우 해결된다:
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# 한글 폰트 설정 (맑은 고딕 사용)
plt.rcParams['font.family'] = 'Malgun Gothic'
# Mac OS의 경우 다음 폰트 사용
# plt.rcParams['font.family'] = 'AppleGothic'
# 마이너스 기호 깨짐 해결
plt.rcParams['axes.unicode_minus'] = False
그래도 문제가 해결되지 않는다면, 시스템에 설치된 폰트를 확인해보자:
print([f.name for f in fm.fontManager.ttflist])
실제 데이터 분석 프로젝트에서는 데이터 로딩, 전처리, 분석, 시각화가 하나의 흐름으로 진행된다. 다음은 Pandas와 Matplotlib을 함께 사용하여 CSV 파일을 분석하고 시각화하는 전체 워크플로우 예시다:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from datetime import datetime
# 1. 데이터 로딩
df = pd.read_csv('sales_data.csv')
# 2. 데이터 전처리
df['date'] = pd.to_datetime(df['date'])
df['month'] = df['date'].dt.month
df['year'] = df['date'].dt.year
monthly_sales = df.groupby(['year', 'month'])['sales'].sum().reset_index()
# 3. 그래프 스타일 설정
plt.style.use('seaborn')
plt.figure(figsize=(12, 7))
# 4. 데이터 시각화
years = monthly_sales['year'].unique()
markers = ['o', 's', '^', 'D', 'x']
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd']
for i, year in enumerate(years):
data = monthly_sales[monthly_sales['year'] == year]
plt.plot(data['month'], data['sales'],
marker=markers[i % len(markers)],
color=colors[i % len(colors)],
linewidth=2,
label=str(year))
# 5. 그래프 꾸미기
plt.title('월별 매출 추이 (연도별 비교)', fontsize=16, pad=20)
plt.xlabel('월', fontsize=14, labelpad=10)
plt.ylabel('매출 (백만원)', fontsize=14, labelpad=10)
plt.grid(True, linestyle='--', alpha=0.7)
plt.xticks(range(1, 13),
['1월', '2월', '3월', '4월', '5월', '6월',
'7월', '8월', '9월', '10월', '11월', '12월'],
rotation=45)
plt.legend(title='연도', title_fontsize=12, fontsize=10, loc='best')
# 6. 강조 표시 추가 (최고 매출 월)
for year in years:
data = monthly_sales[monthly_sales['year'] == year]
max_sales_idx = data['sales'].idxmax()
max_month = data.loc[max_sales_idx, 'month']
max_sales = data.loc[max_sales_idx, 'sales']
plt.scatter(max_month, max_sales, s=100,
color='red', zorder=5,
label=f'최고 매출 ({year})' if year == years[0] else "")
plt.annotate(f'{max_sales:,.0f}',
xy=(max_month, max_sales),
xytext=(0, 10),
textcoords='offset points',
ha='center', va='bottom')
# 7. 레이아웃 조정 및 저장
plt.tight_layout()
plt.savefig(f'monthly_sales_{datetime.now().strftime("%Y%m%d")}.png', dpi=300)
plt.show()
실용적인 데이터 시각화 예제: 주식 가격 차트
이제 Matplotlib을 활용한 실전 예제를 살펴보자. 아래 코드는 주식 데이터를 분석하고 전문적인 차트를 만드는 방법을 보여준다. 여러 개의 subplot을 사용하여 가격 변동, 거래량, 이동 평균선을 함께 표시하는 종합적인 차트다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.ticker import FuncFormatter
# 샘플 주식 데이터 생성 (실제로는 pandas_datareader 등으로 가져올 수 있음)
np.random.seed(42)
dates = pd.date_range(start='2023-01-01', end='2023-12-31', freq='B')
n = len(dates)
# 초기 가격 및 변동성 설정
price = 100
volatility = 1.5
prices = [price]
# 임의 가격 변동 생성 (랜덤 워크)
for _ in range(1, n):
rnd = np.random.randn()
change_percent = rnd * volatility
price *= (1 + change_percent/100)
prices.append(price)
# OHLC 데이터 생성 (Open, High, Low, Close)
df = pd.DataFrame({
'Date': dates,
'Close': prices
})
# Open 가격 (전일 종가)
df['Open'] = df['Close'].shift(1)
df.loc[0, 'Open'] = df.loc[0, 'Close'] * 0.99 # 첫 날 시가
# High, Low 가격
daily_volatility = 0.5 # 일중 변동성
df['High'] = df.apply(lambda x: max(x['Open'], x['Close']) * (1 + np.random.uniform(0.1, daily_volatility)/100), axis=1)
df['Low'] = df.apply(lambda x: min(x['Open'], x['Close']) * (1 - np.random.uniform(0.1, daily_volatility)/100), axis=1)
# 거래량 생성 (가격 변동이 클수록 거래량 증가)
df['Volume'] = df.apply(
lambda x: np.random.randint(100000, 1000000) * (1 + abs(x['Close']/x['Open'] - 1) * 10),
axis=1
)
# 이동평균 계산
df['MA5'] = df['Close'].rolling(window=5).mean()
df['MA20'] = df['Close'].rolling(window=20).mean()
df['MA60'] = df['Close'].rolling(window=60).mean()
# 그래프 그리기
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8), gridspec_kw={'height_ratios': [3, 1]}, sharex=True)
# 메인 주가 차트 (캔들스틱 대신 OHLC 값으로 선 그래프 그리기)
ax1.plot(df['Date'], df['Close'], 'k-', linewidth=1.5, label='종가')
ax1.plot(df['Date'], df['MA5'], 'b-', linewidth=1, label='5일 이동평균')
ax1.plot(df['Date'], df['MA20'], 'r-', linewidth=1, label='20일 이동평균')
ax1.plot(df['Date'], df['MA60'], 'g-', linewidth=1.5, label='60일 이동평균')
# 차트 스타일링
ax1.set_title('가상 주식 차트 (2023년)', fontsize=16, pad=20)
ax1.set_ylabel('주가 (원)', fontsize=12)
ax1.grid(True, linestyle='--', alpha=0.7)
ax1.legend(loc='best')
# y축 포맷팅 (천 단위 콤마)
def price_formatter(x, pos):
return f'{x:,.0f}'
ax1.yaxis.set_major_formatter(FuncFormatter(price_formatter))
# 주요 가격대 표시
max_price = df['High'].max()
min_price = df['Low'].min()
last_price = df['Close'].iloc[-1]
ax1.axhline(y=max_price, color='r', linestyle=':', alpha=0.7)
ax1.axhline(y=min_price, color='g', linestyle=':', alpha=0.7)
ax1.text(df['Date'].iloc[0], max_price, f' 최고가: {max_price:,.0f}원', va='bottom')
ax1.text(df['Date'].iloc[0], min_price, f' 최저가: {min_price:,.0f}원', va='top')
# 거래량 차트
ax2.bar(df['Date'], df['Volume'], color='darkblue', alpha=0.7, width=1.5)
ax2.set_ylabel('거래량', fontsize=12)
ax2.grid(True, linestyle='--', axis='y', alpha=0.7)
# x축 날짜 포맷 설정
months = mdates.MonthLocator()
month_fmt = mdates.DateFormatter('%Y-%m')
ax2.xaxis.set_major_locator(months)
ax2.xaxis.set_major_formatter(month_fmt)
plt.xticks(rotation=45)
# 레이아웃 조정
plt.tight_layout()
plt.show()
이 코드는 다음과 같은 고급 기능을 사용하여 실제 금융 분석에서 볼 수 있는 차트를 만든다:
- 여러 그래프 동시에 표시: 주가와 거래량을 별도의 subplot으로 표시
- 이동평균선: 여러 기간의 이동평균을 계산하고 시각화
- 날짜 처리: matplotlib.dates를 사용하여 X축 날짜 포맷 지정
- 축 포맷터: 천 단위 구분 기호가 있는 숫자 포맷 적용
- 중요 지점 강조: 최고가, 최저가를 수평선과 텍스트로 강조
이 예제를 기반으로 실제 주식 데이터를 사용하여 차트를 만들 수 있다. 주식 데이터는 yfinance
또는 pandas_datareader
라이브러리를 사용하여 가져올 수 있다.
인터랙티브 시각화로 확장하기
Matplotlib의 기본 그래프는 정적이지만, 웹 환경에서 인터랙티브한 시각화가 필요하다면 Matplotlib을 기반으로 한 다음 라이브러리들을 고려해볼 수 있다:
# Matplotlib을 기반으로 한 인터랙티브 시각화 라이브러리들
# 1. mpld3 - Matplotlib 그래프를 D3.js로 변환
import mpld3
mpld3.enable_notebook() # Jupyter Notebook에서 사용 시
# 2. Plotly Express - 쉬운 인터랙티브 그래프
import plotly.express as px
fig = px.line(df, x='Date', y='Close', title='주가 차트')
fig.show()
# 3. Bokeh - 인터랙티브 웹 시각화에 특화
from bokeh.plotting import figure, show
from bokeh.io import output_notebook
output_notebook()
p = figure(title="주가 차트", x_axis_type="datetime", width=800, height=400)
p.line(df['Date'], df['Close'], line_width=2)
show(p)
Matplotlib은 기본적인 시각화부터 복잡한 분석 차트까지 다양한 그래프를 만들 수 있는 강력한 도구다. 이번 포스트에서 배운 내용을 바탕으로 데이터를 더 효과적으로 분석하고 시각화해보자.
정리 및 다음 단계
이번 포스트에서는 Matplotlib의 기본부터 심화 내용까지 다루었다. 데이터 시각화는 분석 결과를 효과적으로 전달하는 중요한 단계로, 단순히 '예쁜 그림'을 그리는 것이 아니라 데이터의 패턴과 인사이트를 명확하게 보여주는 과정이다. 대부분의 경우 기본적인 선 그래프, 막대 그래프, 산점도만으로도 충분히 데이터를 표현할 수 있지만, 필요에 따라 더 복잡한 시각화 기법을 활용할 수 있다.
Matplotlib이 완벽하진 않다. 기본 스타일이 미적으로 아쉽고, API가 직관적이지 않으며, 인터랙티브 기능이 부족하다. 그래도 파이썬 시각화의 기반이 되는 라이브러리로, 이를 이해하면 다른 시각화 라이브러리(Seaborn, Plotly)도 쉽게 배울 수 있다. 시각화 작업을 진행할 때는 항상 정확성과 명확성에 중점을 두고, 화려한 시각적 효과보다는 데이터의 메시지가 잘 전달되는지 고려해야 한다.
이제 Matplotlib의 기본 원리를 이해했으니, 실제 데이터로 다양한 그래프를 그려보면서 실력을 키워보자. 처음에는 어색하더라도 반복적인 연습을 통해 자신만의 시각화 스타일과 패턴을 발견할 수 있을 것이다. 다음 단계로는 Seaborn, Plotly와 같은 고급 시각화 라이브러리를 학습하거나, 대시보드 툴인 Dash나 Streamlit을 활용해보는 것을 추천한다.
'Developer > Python' 카테고리의 다른 글
[Python] CSV 파일 다루기: 데이터 불러오기와 저장 (0) | 2025.03.17 |
---|---|
[Python] 파이썬 Numpy로 배우는 행렬 연산 (0) | 2025.03.17 |
[Python] 파이썬 Pandas로 엑셀 데이터 읽고 분석하기 (0) | 2025.03.17 |
[Python] 랜덤 숫자 맞추기 (0) | 2025.03.14 |
[Python] input() 함수로 사용자와 상호작용하기 (0) | 2025.03.14 |