본문 바로가기
Robot/22년도 자율주행 테크니션 양성과정 일지록

[파이썬] DAY14 Matplot

by 9루트 2022. 2. 7.

1. Matplot의 기능들

1. Matplot이란

데이터의 시각화를 위해 그래프나 이미지를 출력하기 위한 라이브러리이다.

 

import matplotlib.pyplot as plt
y = [1,5,43,7,2,1]
plt.plot(y)
plt.show()

을 실행하면 다음과 같은 그래프가 나타난다.

각각의 인덱스는 x축, 값은 y축으로 설정해서 그래프로 표현한다.

 

2. plot()

메소드의 입력 파라미터의 개수가 2개인 경우 첫번째 항목은 x축, 두번째항목은 y 축의 좌표값으로 나타낸다.

import matplotlib.pyplot as plt
y = [1,5,43,7,2,1]
plt.plot(range(1,len(y)+1),y)
plt.show()

를 실행해보면 아래와 같이 나온다.

x축이 0이 아닌 1부터 시작한다.

import matplotlib.pyplot as plt
y = [1,5,43,7,2,1]
plt.plot(range(1,len(y)+1),y)
plt.show()

 

x의 원소의 갯수랑 y의 원소의 갯수가 다르면 출력이 되지 않는다.

즉 x의 갯수 = y의 갯수 이어야 그래프가 출력된다.

 

아래와 같이 다양하게 축을 설정할 수 있다.

리스트 형태로 x 축 설정

import matplotlib.pyplot as plt
y = [1,5,43,7,2,1]
plt.plot(["data1","data2","data3","data4","data5","data6"], y)
plt.show()

 

x 축을 라벨링 했다.

 

 

plt.plot("1,2,3,4,5,6", y)

 

3. label()

여러 그래프를 한 좌표에 나타내보자.

show()는 반드시 마지막 출력할 때 한번만 써야 하나로 묶어서 나온다.

아래와 같이 제목과 라벨링과 위치를 조정해서 적을 수도 있다.

import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8,9,10,11,12]
y1 = [10,20,25,40,80,120,135,120,80,30,10,5]

plt.plot(x,y1, label = "Electric bill")
plt.xlabel("2021year(month)")
plt.ylabel("price(million dollars)")
#plt.show()


y2 = [130,100,60,20,50,10,40,20,40,90,120,160]
plt.plot(x,y2, label = "Gas bill")


plt.legend(loc = "upper left")
plt.title("2021year bill")
plt.show()

 


4. 점(o) 그래프

b(blue) + o (점모양)

import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [10,20,25,40,80]
plt.plot(x,y,"bo")
plt.show()

 

5. axis(x최소, x최대, y최소, y최대)

import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [10,20,25,40,80]
plt.plot(x,y,"bo")
plt.axis([2,4.8,20,80])
plt.show()

 


2. Numpy Matplot

1. 넘파이 배열을 나타내보기

넘파이 배열들을 그래프로 나타내보자.

이차원 변수 또한 각각 넘파이 슬라이싱을 통해 뽑아오게 된다.

import numpy as np

points = np.array([[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3]])
p = np.array([2.5, 2])

import matplotlib.pyplot as plt
plt.plot(points[:,0], points[:,1],"ro")
plt.plot(p[0], p[1], "bo")
plt.show()

을 실행하면 아래와 같은 그래프처럼 각 데이터가 점으로 표현된다.

 

2. 점이 아닌 그래프로 표현해보자

1) np.linspace( 시작포함, 끝포함, 데이터갯수 )

은 같은 간격으로 데이터 갯수만큼 주어진 범위내에서 데이터를 만드는 기능을 한다.

 

 

import numpy as np
import matplotlib.pyplot as plt
x = np.array([100,200,300,400])
y =  x ** 3
print(y)
plt.plot(x,y)
plt.show()

은 단지 확인용으로 해본 코드이고

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,5,10)
y = x ** 2
print(x)
print(y)
plt.plot(x,y,"o-")
plt.show()

을 구현해보면 아래와 같이 그래프에 점과 선이 동시에 표현된다.

 

plt.plot(x,y,"gs-", linewidth = 3, markersize = 20)

에서 g는 green(초록색)을 의미하고 s는 square(네모) 모양을 의미한다.

plt.savefig("mplot.pdf")

를 이용하여 파일명을 mplot.pdf로 저장할 수 있다.


 

2) np.logspace( 시작포함, 끝포함, 데이터갯수 )

import numpy as np
import matplotlib.pyplot as plt
x = np.logspace(-1,1,10)
y = x ** 2
print(x)
print(y)
#plt.plot(x,y,"o-")
plt.plot(x,y,"gs-", linewidth = 3, markersize = 5)
plt.show()

plt.savefig("mplot.pdf")

사실 logspace() 는 잘 안쓴다.

 

 

3) standard_normal()

import numpy as np
import matplotlib.pyplot as plt
x = np.random.standard_normal(size = 10)
print(x)
print(x.shape)
plt.hist(x)
plt.show()

hist() 메소드 인자로 각 구간에 몇 개의 요소가 있는지 보여준다.

 

4) 별 모양의 그래프

각 공간의 영향력을 뿌리는 형태로 데이터의 산포도를 표현할 수 있다.

 

import numpy as np
import matplotlib.pyplot as plt
x = np.random.rand(30)
y = np.random.rand(30)
colors = np.random.rand(30)
shape = np.pi * (np.random.rand(30) * 20) ** 2
plt.scatter(x,y, s=shape, c = colors, marker = '*', alpha=0.7)

plt.show()