본문 바로가기
파이썬으로 배우는 지구과학

파이썬의 3D(3차원) 그래프 그리기를 이용하여 우리은하의 구상성단 분포 그리기

by 0대갈장군0 2022. 4. 18.
반응형

일반적으로 2차원 그래프에 점을 찍는 형태가 많이들 사용하는 그래프입니다. 

하지만 때때로 3개의 축에 그래프를 표현할 필요가 있는 경우도 있습니다.

 

위 그림처럼 x,y,z 3개의 축이 필요한 경우인데요, 이번에 알아볼 것이 우리은하에 분포하는 구상성단의 분포를 3차원(3D) 그래프로 그리는 방법입니다. 우리 은하에 있는 구상성단의 분포를 2개 축에서만 그리면 그 분포를 한눈에 알아보기 어렵습니다. 아래 그림을 보면 알 수 있습니다. 공간상 분포는 x, y, z 3개 축이 필요한데, 이걸 2개씩 쪼개어 표현하면 아래 그래프처럼 알아보기가 굉장히 어렵겠죠. 이럴 때 3차원으로 3개 축인 그래프가 필요할 것 입니다. 참고로 아래 그래프에서 빨간 점은 태양이고 파란 점이 모두 구상성단입니다.

<우리은하에 있는 구상성단의 분포. 2차원 그래프에 표현하였다>

  1. 데이터 다운받기

구상성단의 위치를 찍으려면 구상성단의 좌표가 필요합니다. 본 데이터는, 비상 지구과학 교과서에 있는 데이터와 인터넷을 뒤져 찾아낸 데이터를 합쳐서 엑셀에다 입력하고 csv로 변환한 것입니다. 총 60개의 구상성단 데이터가 포함되어 있습니다. 바이러스 같은건 심을줄도 모르고, 심을 생각도 없습니다. 안심하시고 다운받으셔도 되요.ㅎㅎㅎ

globular2.csv
0.00MB

교과서에서 어떤 데이터를 출처로 만들었는지 모르지만, 교과서에서 사용한 원본데이터의 출처를 찾아내면 나중에 구상성단 150개 전체 데이터로도 한번 만들어 볼 생각입니다.

 

  2. 코드 구현하기

3차원 그래프를 그릴 명령어만 알면 코드 자체는 전혀 어렵지 않습니다.

 1) 초록색과 빨간색은 필수 라이브러리 코드입니다.

  그런데 여기서 빨간색 코드는 matplotlib의 버전이 3.2 이상이면 궂이 치지 않아도 됩니다. 쓰이지 않고 있는데, matplotlib의 버전이 3.2 이상이면 안써도 되고, 그 이하이면 써야 합니다. 

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import pandas as pd

 

 2) 다음은 데이터를 불러오는 코드입니다.

판다스를 이용했구요, 공간상 분포이니 3개 축의 데이터가 필요합니다.

data=pd.read_csv('C:\\111\\globular.csv')
x=data['x']
y=data['y']
z=data['z']
반응형

 3) 그래프를 그리는 코드입니다. 중요한 코드에 빨간색 표시를 하겠습니다.

fig = plt.figure(figsize=(5, 5))
ax = fig.gca(projection='3d')                   ## projection='3d'라고 지정함으로써 3D 그래프를 그리게 됩니다.
ax.view_init(10,60)                                 

## 그래프가 보이는 각도를 지정해주는 것입니다.

##숫자를 이리저리 바꿔보면 쉽게 알 수 있습니다.
ax.scatter(x,y,z, marker='o', s=15, c='darkgreen')

## 3차원 그래프에 점으로 표현하라는 의미입니다. marker는 점의 모양, s는 점의 사이즈, c는 점의 색입니다.
ax.scatter(0,0,0, marker='o', s=35, c='red')     ##태양의위치입니다.
plt.savefig('C:\\111\\3dcluster.png',  bbox_inches='tight', pad_inches=0.1, dpi=300) ## 그래프를 저장
plt.show()

 

이렇게 코드를 입력하면, 짠 하고 이런 그래프가 나옵니다.

ax.view_init(10,60)에 있는 숫자를 이리저리 바꾸면 아래 그림처럼 다양한 각도로 그래프를 나타낼 수 있습니다.

 

4) 대화형 3D 그래프를 그릴 수 있습니다.

대화형으로 표현하면 아래 영상처럼 마우스로 그래프를 자유자재로 움직이며, 확대 축소도 가능합니다. 대화형으로 표현하기 위해서는 코드 맨 앞줄에 아래 명령어를 추가로 집어넣으면 됩니다.

 

%matplotlib notebook

 

그럼 아래 영상처럼 자유자재로 보이는 화면을 바꿀 수 있습니다.

 

  3. 무엇을 알 수 있을까

데이터가 부족하여 단정하기는 어려운 내용이긴 하지만, 태양이 우리 은하의 중심에 있지 않다는 것을 확인할 수 있습니다. 만약 태양이 우리은하 중심에 있다면, 구상성단도 우리은하를 중심으로 분포할테니까요. 하지만 그래프를 보면 알 수 있듯이, 태양은 구상성단의 분포를 기준으로 약간 변두리에 위치해 있습니다. (그래프에서 빨간색 점이 태양의 위치입니다.)

 

또한 구상성단의 위치를 보면 알 수 있듯, 구상성단이 단순히 원반에만 있지 않고 매우 떨어진 곳에도 일부 분포합니다. 실제로 우리은하에 분포하는 구상성단은 은하 헤일로에도 상당수 존재하는 것으로 알려져 있습니다.

<우리은하 주변 구상성단의 분포(출처 : https://www.britannica.com/science/globular-cluster)>

위 그림을 보면 은하 원반 주변에 다수가 분포하지만 헤일로에도 적지않은 수가 분포해 있는것을 알 수 있습니다. 

 

현재까지 우리은하에서만 150여개 정도의 구상성단이 발견되었다고 합니다. 그런데 아직 발견되지 않은것이 10~20여개 정도 더 있을 것으로 추정한다고 하네요. 어찌되었든 구상성단은 아직도 많이 알려진 것이 없다고 합니다.

 

다음 포스팅에서는 더 재미있는 내용으로 글을 써 보도록 하겠습니다.

 

반응형

댓글