पायथन में 3 डी स्कैटर प्लॉट कैसे बनाएं?


93

वर्तमान में मेरे पास एक nx3 मैट्रिक्स सरणी है। मैं तीन स्तंभों को तीन अक्षों के रूप में प्लॉट करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

मैंने गुगली की है और लोगों ने मतलाब का उपयोग करने का सुझाव दिया है , लेकिन मुझे इसे समझने में मुश्किल समय आ रहा है। मुझे भी एक बिखराव की साजिश चाहिए।

क्या कोई मुझे सिखा सकता है?


1
क्या आप प्लॉट करने के लिए किसी एप्लिकेशन की तलाश कर रहे हैं, या क्या आप कोड लिखना चाहते हैं (जो भी भाषा में) वह प्लॉट खींचता है?
निल्स पिपेनब्रिनक

Asymptote का उपयोग करें - यह मुफ़्त है, शक्तिशाली है, और गुणवत्ता बहुत बढ़िया है!
हमीश ग्रुबीजन

1
यदि आपके पास एक सरणी है, तो मुझे लगता है कि आपके पास एक कार्यक्रम है और यह सरणी इसका हिस्सा है। कृपया हमें यह इंगित करने का मौका दें कि यह किस तरह का कार्यक्रम (भाषा) है!
कार्ल स्मोत्रिकज़

मैं अभी भी asymptote (एक lib के रूप में) का उपयोग करूँगा, या इसके लिए केवल इनपुट फ़ाइल उत्पन्न करूँगा। यह अद्भुत उत्पादन की गुणवत्ता की जाँच करें!
हामिश ग्रुबीजन

2
यदि यह एक n3 सरणी है, तो आपको 3 आयामों में वक्र का एक भूखंड मिलेगा। "3-डी प्लॉट" के लिए, आपको एक n x m x lसरणी की आवश्यकता होगी । क्या आप एक वक्र चाहते हैं, किसी भी एक ट्यूपल के साथ (x,y,z)वक्र पर एक बिंदु का प्रतिनिधित्व करते हैं?
आलोक सिंघल

जवाबों:


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'):।
योनातन सिमसन

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

इसके बजाय asymptote का उपयोग करें!

यह वही है जो यह देख सकता है:

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

यह कोड है: http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.asy

असममित डेटा फ़ाइलों में भी पढ़ सकता है।

और पूरी गैलरी: http://asymptote.sourceforge.net/gallery/

पायथन के भीतर से asymptote का उपयोग करने के लिए:

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


2
मुझे डर है कि इस उत्तर के अधिकांश लिंक अब तक मर चुके हैं = (
alkanen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.