Bagaimana cara membuat plot pencar 3D dengan Python?

93

Saat ini saya memiliki array matriks nx3. Saya ingin memplot tiga kolom sebagai tiga sumbu. Bagaimana saya bisa melakukan itu?

Saya telah mencari di Google dan orang-orang menyarankan untuk menggunakan Matlab , tetapi saya benar-benar kesulitan memahaminya. Saya juga membutuhkannya sebagai plot pencar.

Bisakah seseorang mengajari saya?

pengguna211037
sumber
1
Apakah Anda mencari aplikasi untuk membuat plot, atau Anda ingin menulis kode (dalam bahasa apa pun) yang menggambar plot?
Nils Pipenbrinck
Gunakan asimtot - gratis, kuat, dan kualitasnya luar biasa!
Hamish Grubijan
1
Jika Anda memiliki sebuah array, saya anggap Anda memiliki sebuah program dan array ini adalah bagian darinya. Tolong beri kami kesempatan untuk membantu Anda dengan menunjukkan jenis program (bahasa) itu!
Carl Smotricz
Saya masih akan menggunakan asimtot (sebagai lib), atau hanya menghasilkan file input untuk itu. Lihat kualitas keluaran yang luar biasa!
Hamish Grubijan
2
Jika itu adalah nlarik dengan 3, Anda akan mendapatkan plot kurva dalam 3 dimensi. Untuk "plot 3-d", Anda membutuhkan sebuah n x m x larray. Apakah Anda menginginkan kurva, dengan salah satu tupel (x,y,z)mewakili satu titik pada kurva?
Alok Singhal

Jawaban:

162

Anda dapat menggunakan matplotlib untuk ini. matplotlib memiliki modul mplot3d yang akan melakukan apa yang Anda inginkan.

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

Kode di atas menghasilkan gambar seperti:

gambar matplotlib 3D

Chinmay Kanchi
sumber
11
Solusi bagus. Perhatikan bahwa plt.zlabel('zlabel')tidak akan berhasil. Untuk label z sumbu Anda perlu menggunakan: ax.set_zlabel('Z').
Yonatan Simson
8

Gunakan kode berikut ini berhasil untuk saya:

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

sedangkan X_iso adalah array 3-D saya dan untuk X_vals, Y_vals, Z_vals I copy / use 1 column / axis from that array and assign to those variable / arrays masing-masing.

Saeed Ullah
sumber
1

Gunakan asimtot sebagai gantinya!

Ini akan terlihat seperti:

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

Ini kodenya: http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.asy

Asymptote juga bisa dibaca di file data.

Dan galeri lengkapnya: http://asymptote.sourceforge.net/gallery/

Untuk menggunakan asimtot dari dalam Python:

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

Hamish Grubijan
sumber
2
Saya khawatir sebagian besar tautan dalam jawaban ini sudah mati sekarang = (
alkanen