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()