2010-02-19 10 views
21

मैं इसपायथन: पायथन का उपयोग करके 3 डी ग्राफ कैसे प्लॉट करें?

from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = Axes3D(fig) 

x = [6,3,6,9,12,24] 
y = [3,5,78,12,23,56] 

ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z') 

plt.show() 

करने के लिए matplotlib उपयोग कर रहा हूँ अब इस एक ग्राफ कि 3 डी अंतरिक्ष में क्षैतिज है बनाता है। मैं ग्राफ को लंबवत कैसे बना सकता हूं ताकि यह उपयोगकर्ता का सामना कर सके?

मैं जो करना चाहता हूं वह कई ऐसे लंबवत ग्राफों का निर्माण करना है जो कुछ दूरी से अलग होते हैं और उपयोगकर्ता का सामना कर रहे हैं।

+0

इसके बारे में सोचें, क्या यह 2 डी डेटा प्लॉट करने के लिए 3 डी ग्राफ का उपयोग करने के लिए थोड़ा मूर्ख नहीं है? – badp

+2

मैं एक विशेष पैरामीटर अल्फा (एक्स और वाई नहीं) बदल रहा हूं और अल्फा के विभिन्न मानों के लिए ग्राफ में परिवर्तन को देख रहा हूं – Bruce

उत्तर

11

बी.पी. जवाब ठीक काम हो सकता है, लेकिन वहाँ एक बहुत सरल तरीका है।

आपका वर्तमान ग्राफ जेड-अक्ष पर 'फ्लैट' है, यही कारण है कि यह क्षैतिज है। आप इसे ऊर्ध्वाधर होना चाहते हैं, जिसका अर्थ है कि आप वाई-अक्ष पर 'फ्लैट' होना चाहते हैं। यह आपके कोड के लिए सबसे नन्हा संशोधन शामिल है:

from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = Axes3D(fig) 

x = [6,3,6,9,12,24] 
y = [3,5,78,12,23,56] 
# put 0s on the y-axis, and put the y axis on the z-axis 
ax.plot(xs=x, ys=[0]*len(x), zs=y, zdir='z', label='ys=0, zdir=z') 
plt.show() 

तो आप आसानी से एकाधिक रेखांकन वाईएस पैरामीटर के लिए विभिन्न मूल्यों का उपयोग करके कर सकते हैं (उदाहरण के लिए, ys=[2]*len(x) बजाय ग्राफ थोड़ा डाल के पीछे)।

3

प्रलेखन के अनुसार आप ax.plot_surface(x,y,z) विधि का उपयोग करना चाहते हैं। अधिक जानकारी और चार्ट प्रकार here

निम्नलिखित काम करना चाहिए:

x = [1,2,3] 
y = [4,5,6] 
z = [7,8,9] 
data = zip(x,y,z) 

#map data on the plane 
X, Y = numpy.meshgrid(arange(0, max(x), 1), arange(0, max(y), 1)) 
Z = numpy.zeros((len(Y), len(X)), 'Float32') 
for x_,y_,z_ in data: 
    Z[x_, y_] = z_ #this should work, but only because x and y are integers 
       #and arange was done with a step of 1, starting from 0 
fig = p.figure() 
ax = p3.Axes3D(fig) 
ax.plot_surface(X, Y, Z) 
7

मायावी, विशेष रूप से mlab मॉड्यूल, शक्तिशाली 3 डी प्लॉटिंग प्रदान करता है जो बड़े और जटिल डेटा पर काम करेगा, और numpy arrays पर उपयोग करना आसान होना चाहिए।

7

आप view_init() फ़ंक्शन के साथ 3 डी प्लॉट के व्यू कोण को सेट कर सकते हैं। नीचे दिया गया उदाहरण matplotlib के संस्करण 1.1 के लिए है।

from mpl_toolkits.mplot3d import axes3d 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

x = [6,3,6,9,12,24] 
y = [3,5,78,12,23,56] 

ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z') 
ax.view_init(90, -90) 
plt.show() 
संबंधित मुद्दे