[Python] Plotly 를 이용해서 3차원 산점도와 표면도 그리기 (3D Scatter and Surface Plot in Python using Plotly)
Python 분석과 프로그래밍/Python 그래프_시각화 2023. 6. 11. 22:35이번 포스팅에서는 Python 의 Plotly 모듈을 사용해서
(1) 3차원 산점도 그리기 (3D Scatter Plot using Plotly)
(2) 3차원 표면도 그리기 (3D Surface Plot using Plotly)
하는 방법을 소개하겠습니다
(1) 3차원 산점도 그리기 (3D Scatter Plot using Plotly)
3차원 산점도는 x, y, z 의 3개 축을 기준으로 3차원의 공간에 산점도를 그려서 3개 변수들 간의 관계를 분석하기 위해서 사용합니다. 마커의 크기와 색깔을 달리해서 4번째 변수의 특성을 3차원 산점도에 추가해서 그릴 수도 있습니다.
Scatter3D trace 는 go.Scatter3D() 함수에 의해 반환되는 그래프 객체입니다. 3차원 산점도이기 때문에 x, y, z 의 좌표값을 반드시 넣어줘야 하며, 이들 값은 리스트(List) 또는 Array 객체를 사용합니다.
아래는 싸인과 코싸인 값을 이용해서 3차원 산점도를 그려본 예입니다.
import plotly.graph_objs as go
import numpy as np
z = np.linspace(0, 10, 50)
x = np.cos(z)
y = np.sin(z)
trace = go.Scatter3d(
x = x,
y = y,
z = z,
mode = 'markers',
marker = dict(
size = 12,
color = z,
colorscale = 'Bluered_r'
)
)
layout = go.Layout(title = '3차원 산점도 (3D Scatter plot)')
fig = go.Figure(data = [trace], layout = layout)
fig.show()
(2) 3차원 표면도 그리기 (3D Surface Plot using Plotly)
3차원 표면도는 위도(x, latitude), 경도(y, longitude), 고도(z, altitude) 의 3차원 데이터를 그래프로 표현한 것입니다. 이때 3차원 데이터 값을 개별 점(indivisual points)으로 표현한 대신에 표면(surface)으로 표현하여서 3차원 데이터 간의 관계를 분석할 때 사용합니다.
이때 위도(x, latitude), 경도(y, longitude)는 독립변수(indepedent variable)이 되고, 고도(z, altitude)는 종속변수(dependent variable) 가 됩니다.
아래 예는 Plotly의 graph_objs 메소드 중에서 go.Surface() 메소드를 사용해서 3차원 표면도를 그려면 것입니다.
import numpy as np
import plotly.graph_objs as go
x = np.outer(np.linspace(-2, 2, 30), np.ones(30))
y = x.copy().T # transpose
z = np.cos(x ** 2 + y ** 2)
trace = go.Surface(x = x, y = y, z =z )
data = [trace]
layout = go.Layout(title = '3차원 표면도 (3D Surface Plot)')
fig = go.Figure(data = data, layout=layout)
fig.show()
Plotly 그래프는 interactive mode 를 지원하기 때문에 마우스 커서를 그래프 위에 가져가면 해당 좌표의 정보가 팝업으로 나타납니다. 그리고 커서를 클릭해서 위-아래-좌-우 방향으로 이동하면 3차원 표면도가 방향이 돌아가기 때문에 입체적으로 3차원 표면을 관찰할 수 있는 장점이 있습니다.
[Reference]
* Plotly - 3D Scatter and Surface Plot
: https://www.tutorialspoint.com/plotly/plotly_3d_scatter_and_surface_plot.htm
이번 포스팅이 많은 도움이 되었기를 바랍니다 .
행복한 데이터 과학자 되세요! :-)
'Python 분석과 프로그래밍 > Python 그래프_시각화' 카테고리의 다른 글
[Python] Plotly를 이용해서 클리브랜드 점 그래프 그리기 (Cleveland Dot Plot in Python using Plotly) (0) | 2023.06.18 |
---|---|
[Python] 의사결정나무 시각화 (Visualization of Decision Tree using Python) (5) | 2022.08.22 |
[Python matplotlib] 그래프에 도형 추가하기 (adding shapes, artists in matplotlib's plot) (0) | 2022.02.02 |
[Python matplotlib] 버블 그래프 (Bubble chart) (2) | 2022.02.01 |
[Python] HoloViews 모듈을 사용해서 Sankey Diagram 그리기 (0) | 2022.01.23 |