¿Cómo hacer un diagrama de dispersión 3D en Python?

92

Actualmente tengo una matriz de matriz nx3. Quiero trazar las tres columnas como tres ejes. ¿Cómo puedo hacer eso?

Busqué en Google y la gente sugirió usar Matlab , pero realmente me está costando entenderlo. También necesito que sea un diagrama de dispersión.

¿Alguien puede enseñarme?

usuario211037
fuente
1
¿Está buscando una aplicación para hacer la trama o desea escribir código (en cualquier idioma) que dibuje la trama?
Nils Pipenbrinck
Use la asíntota: ¡es gratis, poderoso y la calidad es increíble!
Hamish Grubijan
1
Si tiene una matriz, supongo que tiene un programa y esta matriz es parte de él. ¡Danos la oportunidad de ayudarte indicándonos qué tipo de programa (idioma) es!
Carl Smotricz
Todavía usaría asíntota (como una lib), o simplemente generaría el archivo de entrada para ello. ¡Mira su increíble calidad de salida!
Hamish Grubijan
2
Si es una nmatriz de 3, obtendrá una gráfica de una curva en 3 dimensiones. Para una "gráfica en 3-d", necesitaría una n x m x lmatriz. ¿Quiere una curva, con una tupla que (x,y,z)represente un punto en la curva?
Alok Singhal

Respuestas:

161

Puede usar matplotlib para esto. matplotlib tiene un módulo mplot3d que hará exactamente lo que quieras.

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()

El código anterior genera una figura como:

imagen 3D matplotlib

Chinmay Kanchi
fuente
11
Buena solucion. Tenga en cuenta que plt.zlabel('zlabel')no funcionará. Para etiquetar el eje z es necesario utilizar: ax.set_zlabel('Z').
Yonatan Simson
8

Use el siguiente código que funcionó para mí:

# 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()

mientras que X_iso es mi matriz 3-D y para X_vals, Y_vals, Z_vals copié / usé 1 columna / eje de esa matriz y la asigné a esas variables / matrices respectivamente.

Saeed Ullah
fuente
1

¡Utilice asíntota en su lugar!

Así es como puede verse:

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

Este es el código: http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.asy

Asymptote también puede leer archivos de datos.

Y la galería completa: http://asymptote.sourceforge.net/gallery/

Para usar asíntota desde dentro de Python:

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

Hamish Grubijan
fuente
2
Me temo que la mayoría de los enlaces en esta respuesta ya están muertos = (
alkanen