Làm thế nào để tạo biểu đồ phân tán 3D trong Python?


92

Tôi hiện đang có một mảng ma trận nx3. Tôi muốn vẽ ba cột dưới dạng ba trục. Làm thế nào tôi có thể làm điều đó?

Tôi đã tìm kiếm trên Google và mọi người đề xuất sử dụng Matlab , nhưng tôi thực sự gặp khó khăn khi hiểu nó. Tôi cũng cần nó là một âm mưu phân tán.

Ai đó có thể dạy tôi không?


1
Bạn đang tìm kiếm một ứng dụng để thực hiện cốt truyện hoặc bạn muốn viết mã (bằng bất kỳ ngôn ngữ nào) để vẽ cốt truyện?
Nils Pipenbrinck

Sử dụng asymptote - nó miễn phí, mạnh mẽ và chất lượng tuyệt vời!
Hamish Grubijan,

1
Nếu bạn có một mảng, tôi giả sử bạn có một chương trình và mảng này là một phần của nó. Vui lòng cho chúng tôi một cơ hội để giúp bạn bằng cách cho biết đó là loại chương trình (ngôn ngữ) nào!
Carl Smotricz,

Tôi vẫn sẽ sử dụng asymptote (dưới dạng lib) hoặc chỉ tạo tệp đầu vào cho nó. Kiểm tra chất lượng đầu ra tuyệt vời!
Hamish Grubijan,

2
Nếu nó là một nmảng 3, bạn sẽ nhận được một đồ thị của một đường cong trong 3 chiều. Đối với "biểu đồ 3-d", bạn sẽ cần một n x m x lmảng. Bạn có muốn một đường cong, với bất kỳ bộ giá trị nào (x,y,z)đại diện cho một điểm trên đường cong không?
Alok Singhal,

Câu trả lời:


161

Bạn có thể sử dụng matplotlib cho việc này. matplotlib có một mô-đun mplot3d sẽ làm chính xác những gì bạn muốn.

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

Đoạn mã trên tạo ra một hình như:

hình ảnh 3D matplotlib


11
Giải pháp tốt. Lưu ý rằng plt.zlabel('zlabel')sẽ không hoạt động. Để nhãn z trục bạn cần sử dụng: ax.set_zlabel('Z').
Yonatan Simson

8

Sử dụng mã sau nó đã làm việc cho tôi:

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

trong khi X_iso là mảng 3-D của tôi và đối với X_vals, Y_vals, Z_vals, tôi đã sao chép / sử dụng 1 cột / trục từ mảng đó và được gán cho các biến / mảng đó tương ứng.


1

Sử dụng asymptote để thay thế!

Đây là những gì nó có thể trông như thế này:

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

Đây là mã: http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.asy

Asymptote cũng có thể đọc trong các tệp dữ liệu.

Và bộ sưu tập đầy đủ: http://asymptote.sourceforge.net/gallery/

Để sử dụng asymptote từ bên trong Python:

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


1
Tôi e rằng hầu hết các liên kết trong câu trả lời này hiện đã chết = (
alkanen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.