파이썬, NumPy, Matplotlib으로 함수를 그래프로 그리기 2


파이썬, NumPy, Matplotlib으로 함수를 그래프로 그리기

이 페이지에서는 앞에서 만든 간단한 Matplotlib 그래프를 커스터마이즈하는 방법을 소개합니다.




1. 기본 스타일 설정

import numpy as np
import matplotlib.pyplot as plt

# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (6, 3)
plt.rcParams['font.size'] = 12
plt.rcParams['lines.linewidth'] = 5

Matplotlib 그래프를 그리기 전에 스타일을 지정하고 각 구성 요소의 설정을 변경할 수 있습니다.

기본 스타일로 지정하고, figure 크기, font 크기, 그리고 선의 두께를 지정했습니다.

더 자세한 내용은 이 링크를 참고하세요.



2. 데이터 준비하기

x = np.linspace(-1, 1, 1000)
y1 = np.sin(2 * x * np.pi)
y2 = np.cos(2 * x * np.pi)
y3 = np.ceil(3 * x)

정해진 x 값 데이터를 사용하지 않고 특정 구간에서 그래프의 형태를 확인하기 위해서는

np.linspace() 함수를 사용하는 것이 좋습니다.

NumPy의 np.linspace() 함수는 지정한 구간을 균일한 간격으로 나누는 숫자들을 반환합니다.

예를 들어, np.linspace(-1, 1, 1000)는 -1에서 1 사이 구간을 1000개 구간으로 나누는 숫자의 어레이입니다.


또한 NumPy는 자주 사용되는 다양한 함수들을 포함하고 있습니다.

np.sin(), np.cos(), np.ceil() 세가지 함수를 사용해서 y 값 데이터를 준비했습니다.



3. 그래프 그리기

fig, ax = plt.subplots()

ax.plot(x, y1, '--')
ax.plot(x, y2, '-.')
ax.plot(x, y3, alpha=0.7)

ax.spines['left'].set_position('center')        # 왼쪽 축을 가운데 위치로 이동
ax.spines['right'].set_visible(False)          # 오른쪽 축을 보이지 않도록
ax.spines['top'].set_visible(False)            # 위 축을 보이지 않도록
ax.spines['bottom'].set_position(('data', 0))   # 아래 축을 데이터 0의 위치로 이동
ax.tick_params('both', length=0)                # Tick의 눈금 길이 0

plt.show()

plt.subplots()Figure 객체와 Axes 객체를 반환합니다.

Axes 객체는 x-y축, 눈금, 선, 텍스트, 도형 등의 객체를 포함합니다.

ax.spines 클래스는 데이터 영역의 경계를 나타내는 선입니다.

각각 set_position(), set_visible() 메서드를 사용해서 위치를 조절하거나 표시될지 여부를 선택할 수 있습니다.


plot() 함수의 포맷 문자열 (Format string) ‘–’, ‘-.’을 사용해서 선의 스타일을 간단하게 지정하거나

alpha를 사용해서 선의 투명도를 지정할 수 있습니다.

결과는 아래와 같습니다.


파이썬, NumPy, Matplotlib으로 함수를 그래프로 그리기 2



4. 이미지 해상도 설정하기

# plt.show()
plt.savefig('plotting2.png', dpi=200)

savefig() 함수의 dpi는 이미지의 해상도를 지정합니다.

디폴트 값은 100이며, dpi가 커질수록 고해상도의 이미지가 저장됩니다.


전체 예제 코드

아래는 전체 코드입니다.

import numpy as np
import matplotlib.pyplot as plt

# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (6, 3)
plt.rcParams['font.size'] = 12
plt.rcParams['lines.linewidth'] = 5

x = np.linspace(-1, 1, 1000)
y1 = np.sin(2 * x * np.pi)
y2 = np.cos(2 * x * np.pi)
y3 = np.ceil(3 * x)

fig, ax = plt.subplots()

ax.spines['left'].set_position('center')        # 왼쪽 축을 가운데 위치로 이동
ax.spines['right'].set_visible(False)          # 오른쪽 축을 보이지 않도록
ax.spines['top'].set_visible(False)            # 위 축을 보이지 않도록
ax.spines['bottom'].set_position(('data', 0))   # 아래 축을 데이터 0의 위치로 이동
ax.tick_params('both', length=0)                # Tick의 눈금 길이 0

ax.plot(x, y1, '--')
ax.plot(x, y2, '-.')
ax.plot(x, y3, alpha=0.7)

# plt.show()
plt.savefig('plotting2.png', dpi=200)


이전글/다음글