Wie erstelle ich ein 3D-Streudiagramm in Python?

87

Ich habe derzeit ein nx3-Matrix-Array. Ich möchte die drei Spalten als drei Achsen darstellen. Wie kann ich das machen?

Ich habe gegoogelt und die Leute haben vorgeschlagen, Matlab zu verwenden , aber es fällt mir wirklich schwer, es zu verstehen. Ich brauche auch ein Streudiagramm.

Kann mich jemand unterrichten?

user211037
quelle
1
Suchen Sie eine Anwendung für den Plot oder möchten Sie Code (in welcher Sprache auch immer) schreiben, der den Plot zeichnet?
Nils Pipenbrinck
Verwenden Sie Asymptote - es ist kostenlos, leistungsstark und die Qualität ist fantastisch!
Hamish Grubijan
1
Wenn Sie ein Array haben, würde ich annehmen, dass Sie ein Programm haben und dieses Array Teil davon ist. Bitte geben Sie uns die Möglichkeit, Ihnen zu helfen, indem Sie angeben, um welche Art von Programm (Sprache) es sich handelt!
Carl Smotricz
Ich würde immer noch Asymptote (als Bibliothek) verwenden oder einfach die Eingabedatei dafür generieren. Schauen Sie sich die erstaunliche Ausgabequalität an!
Hamish Grubijan
2
Wenn es sich um ein n3-Array handelt, erhalten Sie eine Darstellung einer Kurve in 3 Dimensionen. Für ein "3D-Diagramm" benötigen Sie ein n x m x lArray. Möchten Sie eine Kurve, bei der ein Tupel (x,y,z)einen Punkt auf der Kurve darstellt?
Alok Singhal

Antworten:

152

Sie können dafür matplotlib verwenden . matplotlib verfügt über ein mplot3d- Modul, das genau das tut, was Sie wollen.

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

Der obige Code generiert eine Zahl wie:

Matplotlib 3D-Bild

Chinmay Kanchi
quelle
10
Schöne Lösung. Beachten Sie, dass plt.zlabel('zlabel')nicht funktioniert. Um die z-Achse zu beschriften, müssen Sie Folgendes verwenden : ax.set_zlabel('Z').
Yonatan Simson
6

Verwenden Sie den folgenden Code, der bei mir funktioniert hat:

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

Während X_iso mein 3D-Array ist und für X_vals, Y_vals, Z_vals habe ich 1 Spalte / Achse aus diesem Array kopiert / verwendet und diesen Variablen / Arrays zugewiesen.

Saeed Ullah
quelle
1

Verwenden Sie stattdessen Asymptote!

So kann es aussehen:

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

Dies ist der Code: http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.asy

Asymptote kann auch Datendateien einlesen.

Und die vollständige Galerie: http://asymptote.sourceforge.net/gallery/

So verwenden Sie Asymptote in Python:

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

Hamish Grubijan
quelle
1
Ich fürchte, die meisten Links in dieser Antwort sind inzwischen tot = (
alkanen