Python/Matplotlib

Matplotlib) 그래프 디자인 변경 시 사용하는 함수 알아보기

567Rabbit 2024. 4. 9. 17:37

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt   #별칭지정

import seaborn as sb

 

Matplotlib

파이썬 시각화 라이브러리

 


plot() : 다이어그램에 점(마커)을 그리는데 사용한다
marker : 지정된 마커로 각 지점을 강조할 수 있다
linestyle : 플롯된 선의 스타일을 변경할 수 있다
xlable(), ylable() : x축과 y축에 대한 레이블을 설정할 수 있다
grid() : 플롯에 그리드 선을 추가할 수 있다     

subplot() : 여러 그래프를 그릴 수 있다

 

ex)

plt.subplot(1,2,2) #1줄에 두칸에 두번째에 그래프를 표시한다

ex)

grid( axis = 'y' )    #그리드 선 추가 한쪽만 표현할때는 axis=x or y

 

scatter() : 산점도를 그릴 수 있다
bar() : 막대 그래프를 그릴 수 있다
hist() : 히스토그램을 생성한다
pie() : 원형차트를 만든다

 

-----------------------------------------------------------------------------------------
# 첫 실행에 입력하면 한글로 작성해도 오류가 뜨지 않는다


import platform

from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False

if platform.system() == 'Darwin':
    rc('font', family='AppleGothic')
elif platform.system() == 'Windows':
    path = "c:/Windows/Fonts/malgun.ttf"
    font_name = font_manager.FontProperties(fname=path).get_name()
    rc('font', family=font_name)
else:
    print('Unknown system... sorry~~~~')

 

-----------------------------------------------------------------------------------------

 

 

전체 타이틀 표시

plt.title()

 

서브플롯으로 여러개의 그래프를 표시한다면 subtitle을 설정할 수도 있다

plt.suptitle()

 

 

x,y축에 대한 레이블을 표시

xlabel(), ylabel() 함수를 사용

 

plt.xlabel('X-Label')
plt.ylabel('Y-Label')

 

plt.plot([1,2,3,4],[1,4,9,16], label='Test($)')

 

 

 

축 범위 지정하기

xlim() x축이 표시되는 범위를 지정하거나 리턴
ylim() y축이 표시되는 범위를 지정하거나 리턴

plt.xlim([0, 5]) #[xmin, xmax]
plt.ylim([0, 20]) #[ymin, ymax]

axis() x,y축이 표시되는 범위를 지정하거나 리턴
plt.axis([xmin, xmax, ymin, ymax])

 

 

 

범례 실행하기

plt.legend()

 

plt.legend(loc=' upper right ' )

plt.legend(loc=' upper left ' )

plt.legend(loc=' lower right ' )

plt.legend(loc=' lower left ' )

 

 

그래프 크기 설정하기

plt.figure(figsize=(가로길이,세로길이))

 

 

 

라벨에 여백 지정하기

margin : 바깥 여백
padding : 안쪽 여백


plt.xlabel('X-Label', labelpad=15, fontdict=font1, loc='right')  #loc는 location의 약자이다.
plt.ylabel('Y-Label', labelpad=20, fontdict=font2, loc='top')

 

 

color 설정하기

'b' blue
'g' green
'r' red
'c' cyan (하늘색)
'm' magenta (자주색)
'y' yellow
'k' black
'w' white

 

 

 

선 종류 (linestyle)  지정하기
solid, dashed, dotted, dash-dot

 

plt.plot([1,2,3],[4,4,4],'-',color='C0', label='Solid')
plt.plot([1,2,3],[3,3,3],'--',color='C0', label='Dashed')
plt.plot([1,2,3],[2,2,2],':',color='C0', label='Dotted')
plt.plot([1,2,3],[1,1,1],'-.',color='C0', label='Dash-dot')

 

 

 


marker(마커) 표시

'-' point
',' pixel
'o' circle
'v' triangle_down
'^' triangle_up
'<' triangle_left
'>' triangle_right
'1' tri_down
'2' tri_up
'3' tri_left
'4' tri_right
's' square
'p' pentagon
'*' start
'h' hexagon1 
'H' hexagon2
'+' plus
'x' x
'D' diamond
'd' thin_diamond
'|' vline
'_' hline

 

 

특별한 설정이 없으면 그래프가 실선으로 그려지지만 표기를 위해서 마커 형태의 그래프를 그릴수 있다

 

ex)

plt.plot(x, y, 'bo')

plot()함수에 'bo'를 입력시켜주면 원형마커로 그래프가 표시된다 

b[lue]o[circle]을 나타내는 문자이다
bo- : 단색선
bo-- : dashed line

plt.plot([1,2,3,4],[2,3,5,10],'bo-')
plt.plot([1,2,3,4],[6,7,8,12],'bo--')

 

 

 

축 스케일 변경하기

xscale(), yscale()함수를 사용해서 그래프의 축 스케일을 다양하게 지정할 수 있다
축은 기본적으로 linear(선)스케일로 표시되지만 log, symlog(symmetrical log scale), logit으로 변경할 수 있다

 

 

그래프 영역 채우기

.fill()

fill_between()

fill_betweenx()

plt.fill([1.9, 1.9, 3.1, 3.1],[1.0, 4.0, 6.0, 3.0], color='lightgrey', alpha = 0.5)      # alpha는 투명도이다

plt.fill_between(x[1:3], y[1:3], alpha = 0.5)        

 

 

 

-------------------------------------------------------------------------------------------

많이 사용하지는 않지만 그 외의 그래프 형태는 아래와 같은 것들이 있다.

 

 


#히트맵 : 다양한 값을 갖는 숫자데이터를 열분포 형태와 같이 색상을 이용해서 시각화 한 것 

plt.matshow()
arr = np.random.standard_normal((30,40))

 

 


#표준정규분포를 가지는 2차원 어레이
cmap = plt.get_cmap('bwr')
plt.matshow(arr, cmap=cmap)

 

 


#옵션으로 컬러바를 나타낼수 있다 shrink파라미터로 컬러바의 크기를 결정할수 있다.
plt.colorbar(shrink=0.8, aspect=10)
plt.show()

 

 


#바이올린 플롯( Violinplot ) 그리기 : 데이터의 분포와 범위를 한눈에 보기 쉽게 나타내는 그래프 형식 

 

plt.style.use('default')


np.random.seed(0)           #정해진 숫자값에 따라서 마치 난수처럼 보이는 수열을 생성
data_a = np.random.normal(0, 2.0, 1000)
data_b = np.random.normal(-3.0, 1.5, 500)
data_c = np.random.normal(1.2, 1.5, 1500)

fig, ax = plt.subplots()
violin = ax.violinplot([data_a, data_b, data_c], positions=[2,3,4]) #2,3,4위치에 그래프가 그려짐
plt.show()