Matplotlib 눈금 과다 문제 해결

Beginner

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

소개

Matplotlib 을 사용할 때, 너무 많은 눈금이나 순서가 잘못된 눈금과 같은 예상치 못한 눈금 동작을 경험하는 경우가 흔합니다. 이는 Matplotlib 이 기본적으로 범주형 변수로 처리하는 숫자나 datetime 객체 대신 문자열 목록을 전달하여 발생하는 경우가 많습니다. 이 랩에서는 Matplotlib 에서 너무 많은 눈금을 수정하는 방법에 대한 단계별 지침을 제공합니다.

VM 팁

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

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

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

데이터 타입 확인

첫 번째 단계는 x 축 값의 데이터 타입을 확인하는 것입니다. 문자열 목록인 경우, 눈금 동작이 예상과 다를 가능성이 높습니다. 이를 해결하려면 문자열을 숫자형으로 변환해야 합니다. 다음은 예시입니다.

import matplotlib.pyplot as plt
import numpy as np

## create example data
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]

## plot the data with string tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.set_xlabel('Categories')
plt.show()

이 예제에서는 x 축에 문자열 목록이 있습니다. 데이터를 플롯하면 눈금 레이블이 순서대로 표시되지 않고 잘못 배치됩니다.

문자열을 숫자형으로 변환

눈금 동작을 수정하려면 문자열을 숫자형으로 변환해야 합니다. 다음은 예시입니다.

import matplotlib.pyplot as plt
import numpy as np

## create example data
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]

## convert strings to floats
x = np.asarray(x, dtype='float')

## plot the data with numeric tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.set_xlabel('Floats')
plt.show()

이 예제에서는 np.asarray()를 사용하여 문자열 값을 float 로 변환합니다. 데이터를 다시 플롯하면 눈금 레이블이 예상대로 표시됩니다.

너무 많은 눈금 처리

x 축에 문자열 요소가 많으면, 읽을 수 없는 너무 많은 눈금이 표시될 수 있습니다. 이 경우 문자열을 숫자형으로 변환해야 합니다. 다음은 예시입니다.

import matplotlib.pyplot as plt
import numpy as np

## create example data with 100 elements
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)

## plot the data with string tick labels
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('Categories')
plt.show()

이 예제에서는 x 축에 100 개의 문자열 값이 있어 읽을 수 없는 너무 많은 눈금이 생성됩니다.

이를 해결하려면 문자열을 float 로 변환해야 합니다. 다음은 예시입니다.

import matplotlib.pyplot as plt
import numpy as np

## create example data with 100 elements
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)

## convert strings to floats
x = np.asarray(x, float)

## plot the data with numeric tick labels
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('Floats')
plt.show()

이 예제에서는 np.asarray()를 사용하여 문자열 값을 float 로 변환합니다. 데이터를 다시 플롯하면 눈금 레이블이 예상대로 표시됩니다.

DateTime 눈금 처리

x 축에서 datetime 값을 사용할 때는 적절한 날짜 로케이터 (locator) 와 포맷터 (formatter) 를 얻기 위해 문자열을 datetime 객체로 변환하는 것이 중요합니다. 다음은 예시입니다.

import matplotlib.pyplot as plt
import numpy as np

## create example data with datetime strings
x = ['2021-10-01', '2021-11-02', '2021-12-03', '2021-09-01']
y = [0, 2, 3, 1]

## convert strings to datetime64
x = np.asarray(x, dtype='datetime64[s]')

## plot the data with datetime tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.tick_params(axis='x', labelrotation=90)
plt.show()

이 예제에서는 np.asarray()를 사용하여 문자열 값을 datetime64 로 변환합니다. 데이터를 다시 플롯하면 눈금 레이블이 예상대로 표시됩니다.

요약

요약하면, Matplotlib 을 사용할 때는 x 축 값의 데이터 유형을 확인하는 것이 중요합니다. 문자열인 경우, 예상치 못한 눈금 동작을 수정하기 위해 숫자형으로 변환해야 합니다. 눈금이 너무 많은 경우에도 문자열을 숫자형으로 변환해야 합니다. datetime 값을 사용할 때는 적절한 날짜 로케이터 (locator) 와 포맷터 (formatter) 를 얻기 위해 문자열을 datetime 객체로 변환해야 합니다.