วิธีสร้างพล็อตการกระจาย 3 มิติใน Python


93

ขณะนี้ฉันมีอาร์เรย์เมทริกซ์ nx3 ฉันต้องการพล็อตสามคอลัมน์เป็นสามแกน ฉันจะทำเช่นนั้นได้อย่างไร?

ฉันได้ googled และมีคนแนะนำให้ใช้Matlabแต่ฉันรู้สึกลำบากในการทำความเข้าใจ ฉันยังต้องการให้เป็นพล็อตกระจาย

ใครช่วยสอนหน่อย


1
คุณกำลังมองหาแอปพลิเคชั่นสำหรับสร้างพล็อตหรือคุณต้องการเขียนโค้ด (ในภาษาอะไรก็ได้) ที่วาดพล็อต?
Nils Pipenbrinck

ใช้เส้นกำกับ - ฟรีมีประสิทธิภาพและคุณภาพก็ยอดเยี่ยม!
Hamish Grubijan

1
หากคุณมีอาร์เรย์ฉันจะถือว่าคุณมีโปรแกรมและอาร์เรย์นี้เป็นส่วนหนึ่งของมัน โปรดให้โอกาสเราช่วยเหลือคุณโดยระบุว่าเป็นโปรแกรม (ภาษา) ประเภทใด!
Carl Smotricz

ฉันจะยังคงใช้ asymptote (เป็น lib) หรือเพียงแค่สร้างไฟล์อินพุตสำหรับมัน ตรวจสอบคุณภาพผลผลิตที่น่าทึ่ง!
Hamish Grubijan

2
ถ้าเป็นnอาร์เรย์ 3 ตัวคุณจะได้พล็อตเส้นโค้งเป็น 3 มิติ สำหรับ "พล็อต 3 มิติ" คุณจะต้องมีn x m x lอาร์เรย์ คุณต้องการเส้นโค้งโดยมีทูเพิลอันใดอันหนึ่ง(x,y,z)แทนจุดบนเส้นโค้งหรือไม่?
Alok Singhal

คำตอบ:


162

คุณสามารถใช้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


11
ทางออกที่ดี โปรดทราบว่าplt.zlabel('zlabel')เคยชิน ในการติดป้ายแกน z คุณต้องใช้: ax.set_zlabel('Z').
Yonatan Simson

8

ใช้รหัสต่อไปนี้ที่ใช้ได้สำหรับฉัน:

# 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 คอลัมน์ / แกนจากอาร์เรย์นั้นและกำหนดให้กับตัวแปร / อาร์เรย์เหล่านั้นตามลำดับ


1

ใช้เส้นกำกับแทน!

นี่คือสิ่งที่สามารถมีลักษณะดังนี้:

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

นี่คือรหัส: http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.asy

Asymptote ยังสามารถอ่านในไฟล์ข้อมูล

และแกลเลอรีเต็ม: http://asymptote.sourceforge.net/gallery/

ในการใช้เส้นกำกับจากภายใน Python:

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


2
ฉันกลัวว่าลิงก์ส่วนใหญ่ในคำตอบนี้จะตายไปแล้วในตอนนี้ = (
alkanen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.