2012-01-04 7 views
13

दिए गए 3 डी प्लॉट बनाने के लिए matplotlib का उपयोग करना चाहता हूं मेरे पास एक z फ़ंक्शन है जो x और y पैरामीटर स्वीकार करता है और एक z आउटपुट देता है। मैं इसे 3 डी में प्लॉट करना चाहता हूं और स्केल सेट करना चाहता हूं। मैं इसे आसानी से कैसे कर सकता हूं? मैंने दस्तावेज़ीकरण के माध्यम से बहुत अधिक समय बिताया है और एक बार ऐसा करने के लिए मुझे कोई रास्ता नहीं दिखता है।मैं एक zd फ़ंक्शन

+1

[3 डी भूखंडों के लिए क्षमता] (http://matplotlib.sourceforge.net/mpl_toolkits/mplot3d/tutorial.html) matplotlib में केवल बहुत में जोड़ा गया: यहाँ एक चिकनी सतह उदाहरण है हाल के संस्करण, जहां तक ​​मुझे पता है। –

+0

मैंने पहले ही उस पृष्ठ को देखा है और एक 3 डी प्लॉटटर – WhatsInAName

उत्तर

21

साजिश शैली शैली आपके डेटा पर निर्भर करती है (यानी आप एक 3 डी वक्र, या सतह, या एक तितर बिताने की कोशिश कर रहे हैं ...), लेकिन इससे आपको खेलना शुरू करने के लिए एक कामकाजी उदाहरण देना चाहिए।

असल में, आप साजिश में फ़ंक्शन पास नहीं करते हैं, आप पहले xs और ys का डोमेन बनाते हैं, और फिर उस से zs की गणना करते हैं। मेरे उदाहरण में मैंने डोमेन के लिए एक्स-वाई विमान में समान रूप से दूरी वाले बिंदुओं का एक सरल ग्रिड का उपयोग किया है।

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

def fun(x, y): 
    return x + y 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
n = 10 
xs = [i for i in range(n) for _ in range(n)] 
ys = range(n) * n 
zs = [fun(x, y) for x,y in zip(xs,ys)] 

ax.scatter(xs, ys, zs) 

ax.set_xlabel('X Label') 
ax.set_ylabel('Y Label') 
ax.set_zlabel('Z Label') 

plt.show() 

enter image description here


सतहों के लिए यह थोड़ा अलग है, तो आप 2 डी सरणियों में डोमेन के लिए एक ग्रिड में गुजरती हैं।

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

def fun(x, y): 
    return x**2 + y 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
x = y = np.arange(-3.0, 3.0, 0.05) 
X, Y = np.meshgrid(x, y) 
zs = np.array([fun(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))]) 
Z = zs.reshape(X.shape) 

ax.plot_surface(X, Y, Z) 

ax.set_xlabel('X Label') 
ax.set_ylabel('Y Label') 
ax.set_zlabel('Z Label') 

plt.show() 

enter image description here

+0

पर मनमाने ढंग से जेड-फ़ंक्शन को पारित करने का कोई उदाहरण नहीं ढूंढ पाया है, जब मैं फ़ंक्शन बदलता हूं, तो ग्राफ बहुत अधिक रहता है? क्या एक चिकनी सतह करने का कोई तरीका है? – WhatsInAName

+0

ठीक है, मैंने अपना जवाब एक ढलान वाले परवलयिक सतह के साथ अद्यतन किया है। – wim

+1

अंतिम ग्राफ के लिए, z के अनुसार सतह को रंगने का कोई तरीका है? एक cloropleth का उपयोग कर कहो? –

संबंधित मुद्दे