본문 바로가기
Python/Matplotlib

파이썬에서 산포그래프(scatter plot)의 작성법 - matplotlib(15)

by 콩돌 2019. 5. 16.
반응형

파이썬 버전 3.7 기준

matplotlib 버전 3.0.3 기준



 산포그래프(scatter plot)의 작성법


본 포스팅에서는 scatter()함수의 작성법에 대한 설명과 산포그래프(scatter plot)를 직접 예제를 풀어보고자 한다.

산포그래프의 입력 인자에 대한 상세 설명은 뒷포스팅(링크)를 참고하도록한다.


 산포그래프 작성 방법


산포그래프: 산포그래프(scatter plot)는 다양한 마커사이즈와 컬러를 사용하여 만든 플롯이다. 


 산포그래프의 단순한 작성 형식

먼저 가장 단순하게 산포그래프의 작성형식을 설명하자면 아래와 같다.


작성 형식)

path=scatter(x, y, s=None, c=None)


x, y

  - x축과 y축을 리스트나 넘파이(Numpy)의 배열같이 이터레이블(iterable)한 자료형을 입력받는다.

s

  - 선택적으로 입력하면 되는데 마커의 크기를 설정한다.

  - 마커의 크기를 바꿀 필요가 있을때 입력하면 된다.

  - 스칼라로 입력할 경우 마커의 크기는 고정이다

  - x, y와 같은 요소수를 가지는 이터레이블한 자료형을 입력할 경우 각 마커마다 다른 크기를 설정할 수 있다.

  - 역시 선택적으로 입력하면 되는데 마커의 색상을 설정한다.

  - plot에서 선과 동일한 코드를 입력하는 것이 가능하다.

  - s와 마찬가지로 x, y와 같은 요소수를 가지는 이터레이블한 자료형을 입력할 경우 각 마커마다 다른 색상을 설정할 수 있다.


이외에 plot에서 붙였던 라벨링 등 유사한 기능 역시 제공한다.


plot()함수와 scatter()함수 마커의 차이?

  plot()함수 역시 마커만 보여주는 플롯이 가능하고 속도도 scatter()함수에 비해 더 빠르다. 
  하지만, 마커를 그리는데 있어 scatter()함수는 plot()함수에서 제공하지 않는 높은 자유도를 제공하며 다양한 플롯을 그리는 것이 기능하다.
  따라서 속도냐 다양성이냐에 따라 사용자가 직접 선택하여 사용하면 된다.


 산포그래프의 단순한 작성 예제

산포그래프 작성함수인 scatter()에 대해서는 이후 포스팅(링크)에 자세히 설명하였다.

이 섹션에서는 단순하게 산포그래프를 작성해보는 스크립트 예제를 작성해본다. 


먼저 X값은 x값에 대해서 선형적으로 올라가 값들이 x 축에서는 치우치지 않고 고루 분포되도록 설정하였다. 

Y방향으로는 0에서 20 사이의 랜덤한 정수를 출력하여 분포시키도록 설정하였다.

마커의 크기를 담당하는 S 값은 크기의 변화를 랜덤하게 극적으로 보여주기 위해 랜덤함수를 만들고 100을 곱하여 크기를 키웠다.

C는 색을 랜덤하게 배정하도록 설정하였다.


아래 예제에서 다양한 함수들을 적용하여 플롯을 보기좋게 꾸몄는데 다양한 함수들에 대한 설명은 선행 포스팅(링크)를 참고하도록한다.  


작성 예제) Scatter_ex.py

import matplotlib.pyplot as plt

import numpy as np


# 입력 데이터

X = np.arange(20)

Y = np.random.randint(0, 20, 20)

S = np.abs(np.random.randn(20))*100

C = np.random.randint(0, 20, 20)


# plot 입력

scatter = plt.scatter(X, Y, s=S, c=C, label='A')


# X 및 Y 범위 설정

plt.xlim(X[0]-1, X[-1]+1)

plt.ylim(np.min(Y-1), np.max(Y+1))


# 그래프의 타이틀과 x, y축 라벨링

plt.title('scatter', pad=10)

plt.xlabel('X axis', labelpad=10)

plt.ylabel('Y axis', labelpad=10)


# 틱설정

plt.xticks(np.linspace(X[0], X[-1], 11))

plt.yticks(np.linspace(np.min(np.append(Y, Y)), np.max(np.append(Y, Y)), 11))

plt.minorticks_on()

plt.tick_params(axis='both', which='both', direction='in', pad=8, top=True, right=True)


# 플롯 출력

plt.show()






 

 

 

 

 참고자료

  https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py

  https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html#matplotlib.pyplot.scatter

 






반응형

댓글