Python

Matplotlib-pyplot(plt)로 Python에서 그래프 그리기 기본

qlsenddl 2020. 12. 20. 12:22
728x90

 Matplotlib은 자료를 시각화 하는데 사용하는 대표적인 라이브러리로 import matplotlib.pyplot as plt(matplotlib의 pyplot을 plt라는 이름으로 import한다는 뜻)와 같이 import하여 사용한다.


1. 기본적인 그래프 그리기

plt.plot(a_list, b_list): a_list라는 이름의 리스트를 x, b_list라는 이름의 리스트를 y축으로 하는 그래프 형성

plt.show()그래프를 보여줌

plot()을 쓰면 각 데이터 점을 이어주는 꺽은선 그래프가 출력


ex1>

import matplotlib.pyplot as plt
a = [1, 2, 3, 4]
b = [4, 3, 2, 1]
plt.plot(a, b)
plt.show()
>>

-> (1, 4), (2, 3), (3, 2), (4, 1)을 이어주는 그래프 생성


ex2> sin 그래프 그리기

import matplotlib.pyplot as plt

from math import sin, pi

import numpy as np


a = np.linspace(0, 4*pi, 50) # 0부터 4*pi까지 50개 값 출력

sin_func = lambda x : sin(x) -> 링크 참고

b = list(map(sin_func, a))     -> 링크 참고

plt.plot(a, b)

plt.show()

>> 

2. 산점도 그리기

plt.scatter(a, b)점들이 찍히는 그래프(산점도)가 나타남


옵션

plt.scatter(a, b, s = n1, c = col, alpha = n2, marker = '^')

s: 점의 사이즈 설정 옵션, n은 단순 숫자로 해도 되고 np.array를 적용시켜 값에 따라 다른 점의 size를 줄 수도 있음 ex: plt.scatter(a, b, s = np.array(a)**2) 로 코딩하는 경우 a값이 커짐에 따라 점 크기도 커짐

c: 점의 색 설정 옵션, col‘green’과 같은 색을 지칭하는 string

alpha: 색의 진하기 설정 옵션, n20~1 사이의 숫자로 설정해야 하고, 1에 가까울수록 진함

marker: 점의 모양 설정 옵션, ^는 삼각형으로 표시


ex>
import matplotlib.pyplot as plt
import numpy as np

a = np.random.randn(1000)
b = np.random.randn(1000)
plt.scatter(a, b, s=np.array(a)**2+np.array(b)**2+0.5, c='yellow', alpha=0.7, marker='*')
plt.show()
>> 

3. histogram 그리기

plt.hist(a, bins = n) -> a리스트를 n개의 구역으로 나눈 것에 대해 히스토그램 그림


ex>

import matplotlib.pyplot as plt

import numpy as np


a = np.random.randn(50000)

plt.hist(a, bins = 20)

plt.show()

>> 



4. costomization

plt.xlabel('내용‘): x축의 이름 붙이기

plt.ylabel('내용‘): y축의 이름 붙이기

plt.title('제목‘)그래프의 제목 붙이기

plt.grid(True):   그래프 내에 grid선 표시


ex1> 1-ex2와 비교
import matplotlib.pyplot as plt
from math import sin, pi
import numpy as np

a = np.linspace(0, 4*pi, 50) # 0부터 4*pi까지 50개 값 출력
sin_func = lambda x : sin(x)
b = list(map(sin_func, a))
plt.plot(a, b)
plt.xlabel('x')
plt.ylabel('y')
plt.title('sine graph')
plt.grid(True)
plt.show()
>> 


plt.xticks(list): list안에 있는 값에 대해서만 x축에 눈금 표시

ex: plt.xticks([1, 2, 3])

plt.xticks(list, str_list, rotational = 'vertical'):   list안에 있는 값에 대해서만 표시하는데 str_list에 있는 string으로 표시 가능, rotational = 'vertical'이 있으면 해당 값이 가로가 아닌 세로로 typing

ex: plt.xticks([1, 2, 3], ['1k', '2k', '3k'])

plt.yticks(list):   list안에 있는 값에 대해서만 y축에 눈금 표시

plt.yticks(list, str_list, rotational = 'vertical'): list안에 있는 값에 대해서만 표시하는데 str_list에 있는 string으로 표시 가능


ex2> 

import matplotlib.pyplot as plt

from math import sin, pi

import numpy as np


a = np.linspace(0, 4*pi, 50) # 0부터 4*pi까지 50개 값 출력

sin_func = lambda x : sin(x)

b = list(map(sin_func, a))

plt.plot(a, b)

plt.xticks([0, pi/2, pi, 3*pi/2, 2*pi, 5*pi/2, 3*pi, 7*pi/2, 4*pi])

plt.yticks([1, 0.5, 0, -0.5, -1])

plt.grid(True)

plt.show()

>>


ex3>

import matplotlib.pyplot as plt

from math import sin, pi

import numpy as np


a = np.linspace(0, 4*pi, 50) # 0부터 4*pi까지 50개 값 출력

sin_func = lambda x : sin(x)

b = list(map(sin_func, a))

plt.plot(a, b)

plt.xticks([0, pi/2, pi, 3*pi/2, 2*pi, 5*pi/2, 3*pi, 7*pi/2, 4*pi],

           ['0', 'pi/2', 'pi', '3*pi/2', '2*pi', '5*pi/2', '3*pi', '7*pi/2', '4*pi'])

plt.yticks([1, 0, -1], ['max', '0', 'min'], rotation='vertical')

plt.grid(True)

plt.show()

>>



plt.fill_between(a, b, c, color = 'red'): b(y1)c(y2) 사이의 공간을 'red'색으로 칠함, ax축 리스트

ex: plt.fill_between(a, b, 0, color = 'red'): 그래프와 x축 사이 공간을 a(x)를 따라 빨강색으로 칠함

plt.text(a1, b1, '내용‘):   (a1, b1) 좌표에 내용을 출력


ex4>

import matplotlib.pyplot as plt

from math import sin, pi

import numpy as np


a = np.linspace(0, 4*pi, 50) # 0부터 4*pi까지 50개 값 출력

sin_func1 = lambda x : sin(x)

sin_func2 = lambda x : sin(x)/2

b = list(map(sin_func1, a))

c = list(map(sin_func2, a))

plt.plot(a, b)

plt.plot(a, c)

plt.fill_between(a, b, c, color = 'blue')

plt.text(pi/2, 1, 'max')

plt.text(5*pi/2, 1, 'max')

plt.show()

>>


728x90