Matplotlib 축 변환 기술

Beginner

This tutorial is from open-source community. Access the source code

소개

Matplotlib 는 데이터 시각화를 위해 사용되는 Python 라이브러리입니다. 사용자는 다양한 차트, 플롯 및 그래프를 생성할 수 있습니다. Matplotlib 의 주요 기능 중 하나는 축에 스케일 변환을 적용하는 기능입니다. 이를 통해 특히 매우 크거나 작은 숫자를 다룰 때 데이터를 더 유연하게 표현할 수 있습니다. 이 랩에서는 Matplotlib 를 사용하여 축에 다양한 스케일 변환을 적용하는 방법을 배우겠습니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 액세스하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화할 수 없습니다.

학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 즉시 해결해 드리겠습니다.

라이브러리 가져오기 및 데이터 생성

먼저, 필요한 라이브러리를 가져오고 플롯할 데이터를 생성해야 합니다. 이 예제에서는 y 축에 대한 데이터를 생성하기 위해 정규 분포를 사용합니다.

import matplotlib.pyplot as plt
import numpy as np

## Fixing random state for reproducibility
np.random.seed(19680801)

## make up some data in the interval ]0, 1[
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))

선형 스케일 플롯 생성

우리가 탐구할 첫 번째 유형의 스케일 변환은 선형 (linear) 입니다. 이것은 Matplotlib 에서 사용되는 기본 스케일입니다. 선형 스케일 플롯을 생성하려면 set_yscale() 메서드를 사용하고 문자열 'linear'를 전달합니다. 또한 플롯에 제목과 그리드를 추가합니다.

## linear
plt.plot(x, y)
plt.yscale('linear')
plt.title('Linear Scale')
plt.grid(True)

로그 스케일 플롯 생성

다음으로 탐구할 스케일 변환 유형은 로그 (logarithmic) 입니다. 로그 스케일 플롯을 생성하려면 set_yscale() 메서드를 사용하고 문자열 'log'를 전달합니다. 또한 플롯에 제목과 그리드를 추가합니다.

## log
plt.plot(x, y)
plt.yscale('log')
plt.title('Logarithmic Scale')
plt.grid(True)

대칭 로그 스케일 플롯 생성

세 번째로 탐구할 스케일 변환 유형은 대칭 로그 (symmetrical logarithmic) 입니다. 이 유형의 스케일은 양수와 음수 값을 모두 포함하는 데이터를 처리할 때 유용합니다. 대칭 로그 스케일 플롯을 생성하려면 set_yscale() 메서드를 사용하고 문자열 'symlog'를 전달합니다. 또한 linthresh 매개변수를 0.02로 설정하여 0 주변에서 선형적으로 스케일링될 값의 범위를 지정합니다. 또한 플롯에 제목과 그리드를 추가합니다.

## symmetric log
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthresh=0.02)
plt.title('Symmetrical Logarithmic Scale')
plt.grid(True)

로짓 스케일 플롯 생성

네 번째로 탐구할 스케일 변환 유형은 로짓 (logit) 입니다. 이 유형의 스케일은 0 과 1 로 제한된 데이터를 처리할 때 유용합니다. 로짓 스케일 플롯을 생성하려면 set_yscale() 메서드를 사용하고 문자열 'logit'을 전달합니다. 또한 플롯에 제목과 그리드를 추가합니다.

## logit
plt.plot(x, y)
plt.yscale('logit')
plt.title('Logit Scale')
plt.grid(True)

사용자 정의 스케일 플롯 생성

마지막으로 탐구할 스케일 변환 유형은 사용자 정의 (custom) 입니다. 이를 통해 스케일 변환을 위한 자체 순방향 (forward) 및 역방향 (inverse) 함수를 정의할 수 있습니다. 이 예제에서는 데이터의 제곱근을 취하는 사용자 정의 함수를 정의합니다. 사용자 정의 스케일 플롯을 생성하려면 set_yscale() 메서드를 사용하고 문자열 'function'을 전달합니다. 또한 forward()inverse() 함수를 정의하고 이를 functions 매개변수에 인수로 전달합니다. 또한 플롯에 제목과 그리드를 추가합니다.

## Function x**(1/2)
def forward(x):
    return x**(1/2)

def inverse(x):
    return x**2

plt.plot(x, y)
plt.yscale('function', functions=(forward, inverse))
plt.title('Custom Scale')
plt.grid(True)

메르카토르 투영 변환 스케일 플롯 생성

보너스로, 메르카토르 투영 (Mercator transform) 함수를 사용하여 플롯을 생성해 보겠습니다. 이는 Matplotlib 의 내장 함수는 아니지만, 자체 순방향 (forward) 및 역방향 (inverse) 함수를 정의하여 메르카토르 투영 스케일 플롯을 생성할 수 있습니다. 이 예제에서는 메르카토르 투영을 위한 forward()inverse() 함수를 정의합니다. 또한 플롯에 제목과 그리드를 추가합니다.

## Function Mercator transform
def forward(a):
    a = np.deg2rad(a)
    return np.rad2deg(np.log(np.abs(np.tan(a) + 1.0 / np.cos(a))))

def inverse(a):
    a = np.deg2rad(a)
    return np.rad2deg(np.arctan(np.sinh(a)))

t = np.arange(0, 170.0, 0.1)
s = t / 2.

plt.plot(t, s, '-', lw=2)
plt.yscale('function', functions=(forward, inverse))
plt.title('Mercator Transform Scale')
plt.grid(True)
plt.xlim([0, 180])

요약

이 랩에서는 Matplotlib 을 사용하여 축에 다양한 스케일 변환을 적용하는 방법을 배웠습니다. 선형 (linear), 로그 (logarithmic), 대칭 로그 (symmetrical logarithmic), 로짓 (logit), 사용자 정의 (custom), 그리고 메르카토르 투영 (Mercator transform) 스케일 변환을 살펴보았습니다. 이러한 스케일 변환을 적용함으로써 매우 크거나 작은 숫자를 포함하는 데이터뿐만 아니라 양수와 음수 값을 모두 포함하는 데이터를 더 잘 시각화할 수 있습니다.