2016-03-17 10 views
5

मैं मैटलप्लिब के साथ एक साथ विमान और कुछ बिंदुओं को प्लॉट करने की कोशिश कर रहा हूं। मुझे कोई त्रुटि नहीं है बस बिंदु दिखाई नहीं देगा। मैं कुछ बिंदुओं और विमानों पर अलग-अलग समय पर साजिश कर सकता हूं लेकिन कभी भी एक ही समय में नहीं। कोड का हिस्सा दिखाई देता है:मैटलप्लिब - प्लॉट एक विमान और 3 डी में अंक एक साथ प्लॉट करें

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

point = np.array([1, 2, 3]) 
normal = np.array([1, 1, 2]) 

point2 = np.array([10, 50, 50]) 

# a plane is a*x+b*y+c*z+d=0 
# [a,b,c] is the normal. Thus, we have to calculate 
# d and we're set 
d = -point.dot(normal) 

# create x,y 
xx, yy = np.meshgrid(range(10), range(10)) 

# calculate corresponding z 
z = (-normal[0] * xx - normal[1] * yy - d) * 1. /normal[2] 

# plot the surface 
plt3d = plt.figure().gca(projection='3d') 
plt3d.plot_surface(xx, yy, z, alpha=0.2) 


#and i would like to plot this point : 
ax.scatter(point2[0] , point2[1] , point2[2], color='green') 

plt.show() 
+0

संबंधित: https://stackoverflow.com/questions/13464304/how-can-i-plot-a-3d-plane-in-matlab/13473027#13473027 –

+0

तब उपयोग करने के लिए ax.hold() कोई आवश्यकता नहीं है @AndreyRubshtein वह कैसे संबंधित है? आपका लिंक 'matlab' के बारे में है, यह' matplotlib' – tom

+0

हे @ टॉम के बारे में है, इसमें गणित सूत्र के बारे में एक स्पष्टीकरण है, जिसे मूल प्रश्न –

उत्तर

6

आप कुल्हाड़ियों कि आप करने के लिए नए भूखंडों उन्हें अधिलेखित बजाय अक्ष पर वर्तमान भूखंडों को जोड़ना चाहते हैं बताने के लिए की आवश्यकता होगी। ऐसा करने के लिए, आप axes.hold(True)

# plot the surface 
plt3d = plt.figure().gca(projection='3d') 
plt3d.plot_surface(xx, yy, z, alpha=0.2) 

# Ensure that the next plot doesn't overwrite the first plot 
ax = plt.gca() 
ax.hold(True) 

ax.scatter(points2[0], point2[1], point2[2], color='green') 

enter image description here

अद्यतन

रूप @tcaswell टिप्पणी में बताया उपयोग करने के लिए, वे hold के लिए समर्थन बंद विचार कर रहे हैं की आवश्यकता होगी। नतीजतन, एक बेहतर दृष्टिकोण @tom's answer.

+0

बहुत धन्यवाद है;) – user3601754

+0

क्या आप वास्तव में 'पकड़' दिन-प्रतिदिन उपयोग करते हैं? हम इसे खत्म करने के बारे में बात कर रहे हैं और मैं वास्तव में इसका उपयोग करने वाले किसी व्यक्ति से बात करना चाहता हूं .... – tacaswell

+0

@tcaswell मैं करता हूं, लेकिन मुझे लगता है कि यह मुख्य रूप से MATLAB का उपयोग करने से विकसित आदतों के कारण है। ऐसा कहा जा रहा है, मैं वास्तव में [टॉम] (http://stackoverflow.com/a/36061408/670206) द्वारा उल्लिखित वैकल्पिक दृष्टिकोण की तरह करता हूं लेकिन मैं इसका उपयोग कभी नहीं सोचता! – Suever

5

में के रूप में अधिक भूखंडों को जोड़ने के लिए सीधे कुल्हाड़ियों उपयोग करने के लिए बस @ suever के जवाब में जोड़ने के लिए हो सकता है, आप कोई कारण नहीं आप Axes नहीं बना सकते और फिर साजिश है दोनों सतह और उस पर तितर बितर बिंदु।

# Create the figure 
fig = plt.figure() 

# Add an axes 
ax = fig.add_subplot(111,projection='3d') 

# plot the surface 
ax.plot_surface(xx, yy, z, alpha=0.2) 

# and plot the point 
ax.scatter(point2[0] , point2[1] , point2[2], color='green') 
संबंधित मुद्दे