[python] Python에서 3D 산점도를 만드는 방법은 무엇입니까?

현재 nx3 행렬 배열이 있습니다. 세 개의 열을 세 개의 축으로 플로팅하고 싶습니다. 어떻게 할 수 있습니까?

나는 봤는데 사람들이 Matlab 사용을 제안 했지만 이해하는 데 정말 어려움을 겪고 있습니다. 산점도도 필요합니다.

누군가 나를 가르쳐 줄 수 있습니까?



답변

당신이 사용할 수있는 matplotlib 를 . matplotlib에는 원하는 것을 정확히 수행 하는 mplot3d 모듈이 있습니다.

from matplotlib import pyplot
from mpl_toolkits.mplot3d import Axes3D
import random


fig = pyplot.figure()
ax = Axes3D(fig)

sequence_containing_x_vals = list(range(0, 100))
sequence_containing_y_vals = list(range(0, 100))
sequence_containing_z_vals = list(range(0, 100))

random.shuffle(sequence_containing_x_vals)
random.shuffle(sequence_containing_y_vals)
random.shuffle(sequence_containing_z_vals)

ax.scatter(sequence_containing_x_vals, sequence_containing_y_vals, sequence_containing_z_vals)
pyplot.show()

위의 코드는 다음과 같은 그림을 생성합니다.

matplotlib 3D 이미지


답변

나를 위해 일한 다음 코드를 사용하십시오.

# Create the figure
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Generate the values
x_vals = X_iso[:, 0:1]
y_vals = X_iso[:, 1:2]
z_vals = X_iso[:, 2:3]

# Plot the values
ax.scatter(x_vals, y_vals, z_vals, c = 'b', marker='o')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')

plt.show()

X_iso는 내 3 차원 배열이고 X_vals, Y_vals, Z_vals의 경우 해당 배열에서 1 개의 열 / 축을 복사 / 사용하고 해당 변수 / 배열에 각각 할당했습니다.


답변

대신 점근선을 사용하십시오!

다음과 같이 보일 수 있습니다.

http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.pdf

이것은 코드입니다 :
http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.asy

점근선은 데이터 파일에서도 읽을 수 있습니다.

전체 갤러리 :
http://asymptote.sourceforge.net/gallery/

Python 내에서 점근선을 사용하려면 :

http://www.tex.ac.uk/tex-archive/graphics/asymptote/base/asymptote.py


답변