๐Ÿ“Š Matplotlib ์™„์ „ ์ •๋ณต: ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค์ „๊นŒ์ง€

GarionNachalยท2025๋…„ 6์›” 29์ผ
0

๐ŸŽฏ ๋“ค์–ด๊ฐ€๋ฉฐ

๋ฐ์ดํ„ฐ ๋ถ„์„์—์„œ ์‹œ๊ฐํ™”๋Š” ๋‹จ์ˆœํžˆ ์˜ˆ์œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์†์— ์ˆจ๊ฒจ์ง„ ํŒจํ„ด์„ ๋ฐœ๊ฒฌํ•˜๊ณ , ์ธ์‚ฌ์ดํŠธ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Python์˜ย Matplotlib์€ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์˜ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ๊ฐ„๋‹จํ•œ ์„  ๊ทธ๋ž˜ํ”„๋ถ€ํ„ฐ ๋ณต์žกํ•œ 3D ํ”Œ๋กฏ๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” Matplotlib์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์‹ค์ „ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์™„์ „ํžˆ ๋งˆ์Šคํ„ฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Matplotlib ๊ธฐ๋ณธ ์ฐจํŠธ ์˜ˆ์ œ๋“ค

๐Ÿš€ Matplotlib ์‹œ์ž‘ํ•˜๊ธฐ

์„ค์น˜ ๋ฐ ๊ธฐ๋ณธ ์„ค์ •

Copy# ํŒจํ‚ค์ง€ ์„ค์น˜
pip install matplotlib numpy

# ๊ธฐ๋ณธ ์ž„ํฌํŠธ
import matplotlib.pyplot as plt
import numpy as np

# ํ•œ๊ธ€ ํฐํŠธ ์„ค์ • (ํ•œ๊ตญ์–ด ์‚ฌ์šฉ์ž ํ•„์ˆ˜!)
plt.rcParams['font.family'] = ['Noto Sans CJK JP']
plt.rcParams['axes.unicode_minus'] = False

๐Ÿ’ก Pro Tip: ํ•œ๊ธ€ ํฐํŠธ ์„ค์ •์„ ๋นผ๋จน์œผ๋ฉด ํ•œ๊ธ€์ด ๊นจ์ ธ์„œ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ์„ค์ •ํ•ด์ฃผ์„ธ์š”!

๐Ÿ“ˆ 1. ์„  ๊ทธ๋ž˜ํ”„ (Line Plot) - ํŠธ๋ Œ๋“œ ๋ถ„์„์˜ ๊ธฐ๋ณธ

์„  ๊ทธ๋ž˜ํ”„๋Š” ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๋ณ€ํ™”๋‚˜ ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ์˜ ํŠธ๋ Œ๋“œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ฐจํŠธ์ž…๋‹ˆ๋‹ค.

Copy# ๋ฐ์ดํ„ฐ ์ค€๋น„
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# ์„  ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
plt.figure(figsize=(8, 6))
plt.plot(x, y, marker='o', linewidth=2, markersize=8, color='#2E86AB')
plt.title('์„  ๊ทธ๋ž˜ํ”„ ์˜ˆ์ œ', fontsize=14, fontweight='bold')
plt.xlabel('X ๊ฐ’', fontsize=12)
plt.ylabel('Y ๊ฐ’', fontsize=12)
plt.grid(True, alpha=0.3)
plt.show()

ํ™œ์šฉ ์‚ฌ๋ก€:

  • ๐Ÿ“Š ๋งค์ถœ ์ถ”์ด ๋ถ„์„
  • ๐Ÿ“ˆ ์ฃผ๊ฐ€ ๋ณ€๋™ ์ถ”์ 
  • ๐ŸŒก๏ธ ์˜จ๋„ ๋ณ€ํ™” ๋ชจ๋‹ˆํ„ฐ๋ง

๐ŸŽฏ 2. ์‚ฐ์ ๋„ (Scatter Plot) - ์ƒ๊ด€๊ด€๊ณ„ ๋ฐœ๊ฒฌ

์‚ฐ์ ๋„๋Š” ๋‘ ๋ณ€์ˆ˜ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Copy# ๋žœ๋ค ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
np.random.seed(42)
x = np.random.randn(50)
y = np.random.randn(50)
colors = np.random.rand(50)

# ์‚ฐ์ ๋„ ์ƒ์„ฑ
plt.figure(figsize=(8, 6))
plt.scatter(x, y, c=colors, alpha=0.7, s=60, cmap='viridis')
plt.title('์‚ฐ์ ๋„ ์˜ˆ์ œ', fontsize=14, fontweight='bold')
plt.xlabel('X ๊ฐ’', fontsize=12)
plt.ylabel('Y ๊ฐ’', fontsize=12)
plt.colorbar(label='์ƒ‰์ƒ ๊ฐ’')
plt.grid(True, alpha=0.3)
plt.show()

ํ™œ์šฉ ์‚ฌ๋ก€:

  • ๐Ÿ’ฐ ๊ด‘๊ณ ๋น„ vs ๋งค์ถœ ์ƒ๊ด€๊ด€๊ณ„
  • ๐Ÿ  ์ง‘ ํฌ๊ธฐ vs ๊ฐ€๊ฒฉ ๋ถ„์„
  • ๐Ÿ“š ๊ณต๋ถ€์‹œ๊ฐ„ vs ์„ฑ์  ๊ด€๊ณ„

๐Ÿ“Š 3. ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ (Bar Chart) - ์นดํ…Œ๊ณ ๋ฆฌ ๋น„๊ต

๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•  ๋•Œ ๊ฐ€์žฅ ์ง๊ด€์ ์ธ ์ฐจํŠธ์ž…๋‹ˆ๋‹ค.

Copy# ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐ์ดํ„ฐ
categories = ['์‚ฌ๊ณผ', '๋ฐ”๋‚˜๋‚˜', '์˜ค๋ Œ์ง€', 'ํฌ๋„', '๋”ธ๊ธฐ']
values = [23, 45, 56, 78, 32]

# ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
plt.figure(figsize=(10, 6))
bars = plt.bar(categories, values,
               color=['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7'])
plt.title('๊ณผ์ผ๋ณ„ ํŒ๋งค๋Ÿ‰', fontsize=14, fontweight='bold')
plt.xlabel('๊ณผ์ผ ์ข…๋ฅ˜', fontsize=12)
plt.ylabel('ํŒ๋งค๋Ÿ‰', fontsize=12)

# ๋ง‰๋Œ€ ์œ„์— ๊ฐ’ ํ‘œ์‹œ
for bar, value in zip(bars, values):
    height = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2., height + 1,
             f'{value}', ha='center', va='bottom')

plt.grid(True, alpha=0.3, axis='y')
plt.show()

ํ™œ์šฉ ์‚ฌ๋ก€:

  • ๐Ÿ›๏ธ ์ œํ’ˆ๋ณ„ ํŒ๋งค๋Ÿ‰ ๋น„๊ต
  • ๐Ÿ† ํŒ€๋ณ„ ์„ฑ๊ณผ ๋ถ„์„
  • ๐ŸŒ ์ง€์—ญ๋ณ„ ์ธ๊ตฌ ํ†ต๊ณ„

๐Ÿ“ˆ 4. ํžˆ์Šคํ† ๊ทธ๋žจ (Histogram) - ๋ถ„ํฌ ๋ถ„์„

ํžˆ์Šคํ† ๊ทธ๋žจ์€ ๋ฐ์ดํ„ฐ์˜ ๋ถ„ํฌ๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ•„์ˆ˜ ์ฐจํŠธ์ž…๋‹ˆ๋‹ค.

Copy# ์ •๊ทœ๋ถ„ํฌ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
np.random.seed(42)
data = np.random.normal(100, 15, 1000)

# ํžˆ์Šคํ† ๊ทธ๋žจ ์ƒ์„ฑ
plt.figure(figsize=(10, 6))
plt.hist(data, bins=30, color='#A8E6CF', alpha=0.7,
         edgecolor='black', linewidth=0.5)
plt.title('๋ฐ์ดํ„ฐ ๋ถ„ํฌ ํžˆ์Šคํ† ๊ทธ๋žจ', fontsize=14, fontweight='bold')
plt.xlabel('๊ฐ’', fontsize=12)
plt.ylabel('๋นˆ๋„', fontsize=12)

# ํ†ต๊ณ„ ์ •๋ณด ์ถ”๊ฐ€
mean_val = np.mean(data)
std_val = np.std(data)
plt.axvline(mean_val, color='red', linestyle='--', linewidth=2, label=f'ํ‰๊ท : {mean_val:.1f}')
plt.legend()
plt.grid(True, alpha=0.3, axis='y')
plt.show()

ํ™œ์šฉ ์‚ฌ๋ก€:

  • ๐Ÿ“Š ๊ณ ๊ฐ ์—ฐ๋ น ๋ถ„ํฌ ๋ถ„์„
  • ๐Ÿ’ฐ ์†Œ๋“ ๋ถ„ํฌ ์กฐ์‚ฌ
  • โฑ๏ธ ์‘๋‹ต ์‹œ๊ฐ„ ๋ถ„์„

๐ŸŽจ ๊ณ ๊ธ‰ ์Šคํƒ€์ผ๋ง ํŒ

1. ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ ํ™œ์šฉ

Copy# ์ „๋ฌธ์ ์ธ ์ƒ‰์ƒ ์กฐํ•ฉ
colors = ['#2E86AB', '#A23B72', '#F18F01', '#C73E1D']

2. ๊ทธ๋ฆฌ๋“œ ์ตœ์ ํ™”

Copyplt.grid(True, alpha=0.3, linestyle='-', linewidth=0.5)

3. ๋ฒ”๋ก€์™€ ์ฃผ์„

Copyplt.legend(loc='best', frameon=True, shadow=True)
plt.annotate('์ค‘์š” ํฌ์ธํŠธ', xy=(x, y), xytext=(x+1, y+1),
            arrowprops=dict(arrowstyle='->', color='red'))

๐Ÿ”ง ์‹ค์ „ ํ™œ์šฉ ์ฝ”๋“œ

์„œ๋ธŒํ”Œ๋กฏ์œผ๋กœ ์—ฌ๋Ÿฌ ์ฐจํŠธ ํ•œ๋ฒˆ์—

Copyfig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(15, 12))
fig.suptitle('์ข…ํ•ฉ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ', fontsize=16, fontweight='bold')

# ๊ฐ ์„œ๋ธŒํ”Œ๋กฏ์— ๋‹ค๋ฅธ ์ฐจํŠธ ์ƒ์„ฑ
# ax1, ax2, ax3, ax4์— ๊ฐ๊ฐ ๋‹ค๋ฅธ ์‹œ๊ฐํ™” ์ ์šฉ

์ฐจํŠธ ์ €์žฅํ•˜๊ธฐ

Copyplt.savefig('my_chart.png', dpi=300, bbox_inches='tight',
            facecolor='white', edgecolor='none')

๐ŸŽฏ ๋งˆ๋ฌด๋ฆฌ

Matplotlib์€ ๋‹จ์ˆœํ•ด ๋ณด์ด์ง€๋งŒ ๋ฌด๊ถ๋ฌด์ง„ํ•œ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฐ€์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๋ฐฐ์šด 4๊ฐ€์ง€ ๊ธฐ๋ณธ ์ฐจํŠธ๋งŒ์œผ๋กœ๋„ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํฌ์ธํŠธ ์ •๋ฆฌ:

  • โœ…ย ์„  ๊ทธ๋ž˜ํ”„: ์‹œ๊ฐ„ ํ๋ฆ„๊ณผ ํŠธ๋ Œ๋“œ ๋ถ„์„
  • โœ…ย ์‚ฐ์ ๋„: ๋ณ€์ˆ˜ ๊ฐ„ ์ƒ๊ด€๊ด€๊ณ„ ํŒŒ์•…
  • โœ…ย ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„: ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋น„๊ต ๋ถ„์„
  • โœ…ย ํžˆ์Šคํ† ๊ทธ๋žจ: ๋ฐ์ดํ„ฐ ๋ถ„ํฌ ์ดํ•ด

๋‹ค์Œ ๋‹จ๊ณ„:

  1. ๐ŸŽจ ๊ณ ๊ธ‰ ์Šคํƒ€์ผ๋ง๊ณผ ํ…Œ๋งˆ ์ ์šฉ
  2. ๐Ÿ“Š ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ฐจํŠธ (Plotly ์—ฐ๋™)
  3. ๐ŸŒ ์›น ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์ถ• (Streamlit/Dash)

๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๋Š” ์—ฐ์Šต์ด ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„๋งŒ์˜ ๋ฉ‹์ง„ ์ฐจํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”!


๐Ÿ’ก ์ด ํŠœํ† ๋ฆฌ์–ผ์ด ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ๊ณต์œ ํ•ด์ฃผ์„ธ์š”. ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ ๋ถ„์„ ํŒ์€ ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ ๋งŒ๋‚˜์š”!

๐Ÿ“š ์ถ”๊ฐ€ ํ•™์Šต ์ž๋ฃŒ

profile
AI๋ฅผ ๊ฟˆ๊พธ๋Š” BackEnd๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€