본문 바로가기
데이터분석/Matplotlib &Seaborn

matplotlib 3D 그래프 만들기

by ADELA_J 2023. 7. 4.

< 3D Axes 만들기>

3D랜더링 기능을 가진 서브플롯을 작성할 필요가 있음.

projection = '3d'로 3D 렌더링 기능을 가진 서브플롯을 작성할 수 있음.

맷플롯립 버전이 올라가서 5행은 안써도 된다

linspace(범위, 범위) => 범위가 ticks가 되는것.

meshgrid (t,t)는 만들어진 X,Y 값을 2차원 배열로 만들어줌 

여기서는 linspace 값을 배열로 만들어줌.

X값은 열 방향의 값들이 모두 동일하고, Y값은 행 방향의 값들이 모두 동일하다.

linspace로 만들어진 값들을 grid로 만들어주기 위해 점과 점이 만나는 지점을 만들어주기위해

meshgrid는 튜플형식으로 나오기 때문에 X,Y에 unpacking 해준다.

 

▼ 요런식으로 

이러한 데이터들을 ▼
요런식으로 만들어준다 (중간 50,50은 크기) linspace에서 50개로 구간을 나눴으니

 

 

<곡면 만들기>

먼저 이산형 데이터에 대해 공부,,

https://blog.naver.com/vivaoov/223114383427

 

ax.plt_surface(X,Y,Z)와 같이 데이터를 전달하여 곡면을 만들 수 있다.

왼 : linspace 간격이 10일때, 오: linspace 간격이 100일때, (간격이 촘촘할수록 더 부드러운 그래프가 만들어진다)

 

<3D 히스토그램, 막대그래프 만들기>

- 두 요소의 관계를 찾으려면 x축과 y축에 대응시킨 뒤 z축 방향으로 쌓아가는 시각화 방법이 유용

-  x축, y축, z축의 위치 및 변화량 데이터를 전달하여 만들 수 있음.

67, add_subplot(111) > 1,1,1 임. 콤마는 생략 가능

72. z값을 0으로 밑에 다 깔아주는, 그래프를 아직 그리지 말아야하기에 0으로 만들어줌

75/ 76. 1씩 10번 증가하게 해주는 

72행, zpos는 위치를 잡아주는거라 왼:0으로 잡아줘서 바닥에 깔아주는것이고 오: 10으로 시작한다면 위에 떠 있는 것임.(첫번째는 0이니까)
위 그래프 중에서 오른쪽 그래프

<3D 산포도 만들기>

randn 이 정규분포이다보니 거의 가운데에 값이 몰려있기 때문에 산포도 그래프도 저렇게 나옴.

https://dev-adela.tistory.com/113 (참고)

92~94 행 ravel관련, 1차원으로 바꿔주는

요런식으로 출처 : 넘파이 공식홈피

https://numpy.org/doc/stable/reference/generated/numpy.ravel.html#numpy.ravel

▲ 자세히 알아보기 링크

그리고 85,86,87 행 : random.seed(0) 같은 값으로 시드값을 줬어도 인스턴스값은 다르게 나오기 때문에

몇번을 출력해도 같은 값이 나오지만 각각 할당되는 값들은 다름 (다른 붕어빵 3개가 생겼다고 생각하면 됨)

 

<3D 그래프에 컬러맵 적용하기>

- 점에 찍히는 좌표에 따라 표시하는 색깔을 바꾸는 기능이 있음. 

- cmap:cm.coolwarm을 인수로 전달하면 컬러맵 적용 가능