Attention please

데이터 시각화(tick label & tick param & text) - matplotlib 본문

데이터 시각화/matplotlib

데이터 시각화(tick label & tick param & text) - matplotlib

Seongmin.C 2022. 11. 18. 11:38

tick label

matplotlib 패키지의 boxplot 함수를 사용하여

상자그림을 그릴 수 있습니다.

 

이번에는 이 상자그림을 그린 후 각각의 상자에 대해 tick을 부여한 후

각 tick에 이름을 부여하도록 하겠습니다.

 

fig = plt.figure(figsize = (10,5), dpi = 100)
ax = fig.subplots()

data1 = np.random.normal(0,1, size = (1000,5))
_=ax.boxplot(data1)
_=ax.set_xticks([1,2,3,4,5])
_=ax.set_xticklabels(['월', '화', '수', '목', '금'], fontsize=13)

 

이와 같이 각 상자그림이 무엇을 그리고자 하였는지

set_xticklabels 함수를 사용하여 그릴 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

Tick params

tick_params 함수를 사용하여

Axes에 삽입한 tick의 각종 style을 수정하는 것이 가능합니다.

 

 

이중 axis 파라미터는 어떤 축의 tick을 수정할 것인지 결정할 수 있으며

length 파라미터를 설정하여 tick의 길이를 설정할 수 있습니다.

 

이때 length 파라미터를 이용하여

불필요한 tick을 제거하는 것이 가능합니다.

 

fig = plt.figure(figsize = (12, 4), dpi = 100)
axs = fig.subplots(1,2)

d1 = np.random.normal(0, 2, 1000)
d2 = np.random.normal(1, 2, 1000)
d3 = np.random.normal(4, 2, 1000)
d4 = np.random.normal(3, 2, 1000)

_=axs[0].boxplot([d1,d2,d3,d4], positions=[1,1.5,3,3.5])
_=axs[0].set_xticks([1.25, 3.25])
_=axs[0].set_xticklabels(['남자', '여자'], fontsize=16)

_=axs[1].boxplot([d1,d2,d3,d4], positions=[1,1.5,3,3.5])
_=axs[1].set_xticks([1.25, 3.25])
_=axs[1].set_xticklabels(['남자', '여자'], fontsize=16)
_=axs[1].tick_params(axis='x', length=0)

 

 

 

 

이번에는 tick_param 함수의 다른 파라미터를 입력하여

스타일을 지정시켜보겠습니다.

 

fig = plt.figure(figsize = (10,5), dpi = 100)
axs = fig.subplots(1,2)

m1 = 3
s1 = 5
data = np.random.normal(m1, s1, size = 10000)

_=axs[0].hist(data, bins = 30, edgecolor = 'k')
_=axs[0].set_xticks([m1])
_=axs[0].set_xticklabels([f'$\\mu$={m1}'], fontsize=16)
_=axs[0].set_xlabel('xlabel', fontsize=20)

_=axs[1].hist(data, bins = 30, edgecolor = 'k')
_=axs[1].set_xticks([m1])
_=axs[1].set_xticklabels([f'$\\mu$={m1}'], fontsize = 16)
_=axs[1].set_xlabel('xlabel', fontsize = 20)


## tick 스타일 설정
_=axs[0].tick_params(axis='both', direction='inout', width = 5,
                    length=10, color = 'c')
_=axs[1].tick_params(axis='x', direction='out', width = 5,
                    length=10, pad=20, color = 'y', 
                    labelcolor = 'g', labelsize=30)

_=axs[1].tick_params(axis='y', direction='inout', width=2,
                    length=20, pad=10, color='r',
                    labelcolor='b', labelsize=15)

 

 

 

 

 

 

 

 

 

 

 

Text

text함수를 사용하여 text box를 생성하여 

그림을 그리는 것이 가능합니다.

 

fig = plt.figure(figsize = (5,5), dpi = 100)
ax = fig.subplots()

def aa(X):
    return 0.25 * (X+4) * (X+1) * (X-2)

X = np.linspace(-5, 3, 1000)
Y = aa(X)

_=ax.plot(X,Y)
_=ax.set_title('$f(x)=\\frac{1}{4}(x+4)x(x+1)(x-2)$')

# 최대와 최소점의 x 좌표
max_x = -2.75
min_x = 0.75

# 최대와 최소점의 y 좌표
max_y = aa(max_x)
min_y = aa(min_x)

# text box 그리기
ax.text(max_x, max_y, 'local maximum', fontsize=15,
       ha = 'center', va = 'bottom')

ax.text(min_x, min_y, 'minimum', fontsize=15,
       ha = 'center', va = 'top')

# 해당 text box 의 좌표에 점 찍기
ax.scatter([max_x, min_x],[max_y, min_y], c = 'r')

 

 

또한 text 함수의 bbox 파라미터를 사용하여

해당 text box의 스타일을 딕셔너리에 미리 저장한 후

적용하는 것이 가능합니다.

 

box1 = {'facecolor':'b',
       'edgecolor':'k',
       'alpha':0.5,
       'boxstyle':'square',
       'pad':0.5}

box2 = {'facecolor':'lightblue',
       'edgecolor':'steelblue',
       'alpha':0.9,
       'boxstyle':'round',
       'pad':0.2}
       
ax.text(max_x, max_y, 'local maximum', fontsize=15,
       ha = 'center', va = 'bottom', bbox=box1)

ax.text(min_x, min_y, 'minimum', fontsize=15,
       ha = 'center', va = 'top', bbox=box2)

 

 

 

 

Comments