바이오 대표

[ matplotlib #6 ] Python matplotlib.pyplot 기본 코드 한번에 정리_6 (Scatter 산점도) 본문

Python/matplotlib

[ matplotlib #6 ] Python matplotlib.pyplot 기본 코드 한번에 정리_6 (Scatter 산점도)

바이오 대표 2022. 7. 5. 17:27

 

Matplotlib Scatter

정리 1~ 5 에서 python matplotlib.pyplot 의 전반적인 설명과 plotting plt.plot( ), marker, line, label, grid, subplot에 대해서 살펴보았습니다. 이번 글에서는 해당 라이브러리로 그래프의 Scatter 즉 산점도 그래프에 대한 설명합니다. 

  • scatter  plt.scatter( ) 
  • colormap cmap='viridis'
  • colormap 보이기 plt.colorbar( )

 

 

Scatter Plot 산점도 그래프 그리기

scatter plot은 데이터를 관찰 할 때, 전체적인 분포도를 보기 위하여 각 개체를 점으로 표시하여 나타낸 그래프입니다. 보통 두 개의 변수의 동시분포를 볼 수 있습니다. (두 개 이상도 가능합니다) 두 변수의 상관 관계를 파악 하기위해서도 사용됩니다.

plt.scatter(x,  y

 

예시) 

어느 날, 말의 나이와 스피드를 상관관계를 보기 위하여 말의 나이 (horses' age) 와 말의 스피드 (horses' spped) 의 데이터를 얻었다.

    x 좌표 = 말 나이 (age)

    y 좌표 = 스피드 (speed)

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,17,12,9,6,14])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86,85])

plt.xlabel("Horses' Age")
plt.ylabel("Horses' Speed")

plt.scatter(x, y)
plt.show()

위의 그래프에서 '말이 나이가 들수록 스피드가 낮아진다' 를 해석할 수 있습니다. 만약 다음 날에 데이터를 더 얻어서 합치고 싶으면 plt.scatter( ) 를 여러개 해주면 된다. 

import matplotlib.pyplot as plt
import numpy as np

plt.xlabel("Horses' Age")
plt.ylabel("Horses' Speed")

#day one, the age and speed of 14 horses:
x = np.array([5,7,8,7,2,17,2,9,4,17,12,9,6,14])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86,85])
plt.scatter(x, y)

#day two, the age and speed of 16 horses:
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12,15])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85,90])
plt.scatter(x, y)

plt.show()

* plt.scatter( ) 을 여러개 그릴 때 default 값으로 [1] blue [2] orange 색으로 표현됩니다.

 

 

Scatter plot 의 dot (점) 색 변경 

 

1) Scatter 마다 색 변경 

간단하게 color 혹은 c 를 이용하면 됩니다.

 plt.scatter( x, y, color = 'color code') 

 

* 이때 [1] color 단축어 [2] hex code [3] html color names 로 표기 가능합니다. 자세한 예시는 2022.07.01 - [Python/matplotlib] - [ matplotlib #2 ] Python matplotlib.pyplot 기본 코드 한번에 정리_2 (line) 의 Line color 부분에 나와있습니다. 

import matplotlib.pyplot as plt
import numpy as np

plt.xlabel("Horses' Age")
plt.ylabel("Horses' Speed")

#day one, the age and speed of 14 horses:
x = np.array([5,7,8,7,2,17,2,9,4,17,12,9,6,14])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86,85])
plt.scatter(x, y, color = 'hotpink')

#day two, the age and speed of 16 horses:
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12,15])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85,90])
plt.scatter(x, y, color = '#88c999')

plt.show()

 

2) 점 마다 색 변경 

위와 같이 scatter 마다 색 변경을 할 수 도있지만, 각각의 점에 하나하나 색을 지정해 줄 수도 있습니다. 

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array(["red","green","blue","yellow","pink","black","orange","purple","beige","brown","gray","cyan","magenta"])

plt.scatter(x, y, c=colors)

plt.show()

 

3) ColorMap 이용 : 'viridis'

만약 표현 하고 싶은 색이 많은데, 이름을 모른다면, Matplotlib 이 제공하는 'viridis' colormap 을 사용 할 수 있습니다.  다음과 같이 0 에서 100 까지의 범위 안에서 숫자로 색을 선택 할 수 있습니다. 0 은 보라색, 100 은 노란색을 표현합니다. 해당 map 을 사용하고 싶다면 plt.scatter(x, y, c=colors, cmap='viridis') 을 하면 됩니다.

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])

plt.scatter(x, y, c=colors, cmap='viridis')

plt.show()

만약 그래프에 colormap을 함께 표현하고 싶다면, plt.show() 전에 plt.colorbar() 을 해주면 됩니다. 

...
plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()
plt.show()