Python/문법

[Python] 1. Matplotlib 라이브러리 - 기본 그래프

Easyho.log 2024. 7. 9. 11:56

현재 인공지능을 공부하고 파이썬으로 모델링하면서 많이 쓰는 라이브러리 중 하나가 Matplotlib이다. Matplotlib 라이브러리가 무엇이며 무슨 함수가 있는지 포스팅해보려 한다.


1. Matplotlib이란?

Matplotlib 라이브러리는 그래프를 그리거나 데이터를 시각화하는데 쓰인다. 이 라이브러리가 어디서 쓰일까?

SVM 코드를 예시로 들자면,

model = SVC(
    C = 1e0,
    kernel = 'linear',
    tol=1e-3,
    max_iter=-1,
    decision_function_shape='ovr',
    random_state=0, # 시드는 0으로 고정
)

model.fit(X_train,y_train)
pred_train = model.predict(X_train)

print("n iter:", model.n_iter_)
print("n support:", model.n_support_)

DecisionBoundaryDisplay.from_estimator(
            model, X_train, grid_resolution=100, response_method="predict", cmap=plt.cm.coolwarm, alpha=0.8, eps=0.5
)
plt.scatter(X_train[model.support_,0], X_train[model.support_,1], s=180, edgecolor='g')
plt.scatter(X_train[:,0], X_train[:,1], c=y_train, cmap=plt.cm.bwr, s=80, edgecolor='k')
plt.scatter(X_train[:,0], X_train[:,1], c=pred_train, cmap=plt.cm.bwr, s=10)
plt.show()

print("train acc:", np.sum(pred_train==y_train) / len(y_train) )

 

데이터의 분포도에 따라, 구역을 나눠주는 인공지능 모델이 SVM이다. 이 데이터가 잘 학습이 됐는지 확인하는 지표로 Matplotlib을 쓰는데 이 라이브러리를 활용하면 다음과 같은 그림을 볼 수 있다.

인공지능이 학습이 잘 됐는지 시각화하여 볼 수 있게하려고 Matplotlib 라이브러리를 많이 쓰는 편이다.


2. Matplotlib으로 그래프 만들기

1) 모듈 Import

import matplotlib.pyplot as plt

2) plot() 함수

: 2차원 그래프를 표현하기 위한 함수이다.

import matplotlib.pyplot as plt

# 기본적인 선 그래프 그리기
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
plt.plot(x, y)
plt.show()

다음을 실행하면 (1, 2), (2, 3), (3, 5)... 을 지나는 직선을 그린다.

 

2-1) xlabel, ylabel, title

xlabel, ylabel, title은 x축과 y축이 나타내는 데이터를 정의할 수 있고, title은 제목을 정의한다.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y1 = [2, 3, 5, 7, 11]
y2 = [1, 4, 9, 16, 25]

plt.plot(x, y1)
plt.plot(x, y2)

plt.xlabel('X Axis')
plt.ylabel('Y Axis') # 라벨링 함수
plt.title('Example Plot') # 그래프의 제목
plt.show()

2-2) 선의 옵션 지정

여기서 선의 옵션은 다음과 같이 지정 가능하다. 다음은 예시이다.

  • 'b-': 파란색 실선
  • 'ro': 빨간색 원형 마커
  • 'g--': 녹색 점선
  • 'k^': 검은색 삼각형 마커

-> 여기서 { '-' : 실선 }, { '--' : 점선 }, { '^' : 삼각형 }, { 'o' : 원형 } 이다.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y1 = [2, 3, 5, 7, 11]
y2 = [1, 4, 9, 16, 25]

plt.plot(x, y1, 'b-', label='Prime Numbers')  # 파란색 실선
plt.plot(x, y2, 'ro--', label='Square Numbers')  # 빨간색 원형 마커와 점선

plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.title('Example Plot')
plt.show()

어떠한 선을 그릴 수 있을까?

  • 선 옵션

- '-' : 실선

- '--' : 점선

- ':' : 완전 점선

- '-.' : 실선 + 점선

  • 색상 옵션

: 음.. 색깔 영어 앞 자리 입력하면 되는데... 엄청 많다..!

 

2-3) axis

axis는 영어로 축이라는 말인데, 축의 옵션을 정하는 함수이다. 다음은 축의 최솟값, 최댓값을 지정한 함수이다.

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()

1. axis('on') or axis('off)

on, off 키워드를 통해 축을 보이게 할 수 있고 없게 할 수 있다.

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
plt.axis('off')
plt.show()

이거 그래프입니다^^;;

2. axis('equal')

x, y축의 길이가 동일하다.

3. axis('scaled')

x, y축의 길이의 비율을 맞춘다.

4. axis('image')

이미지 데이터에 맞춘 것이다. 궁금해서 쳐봤다.

import matplotlib.pyplot as plt
import numpy as np

image_data = np.random.rand(10, 10)

plt.imshow(image_data)
plt.axis('image')  # 축 비율 유지하고 데이터 범위에 맞춤
plt.title('Image Axis')
plt.show()