2016-08-02 8 views
0

Ich versuche, 2 Datensätze auf einem einzigen 3D-Plot zu plotten. Was ich ist diese beiden Bilder auf dem gleichen Grundstück zu erwarten: enter image description herePython matplot3d - Zeichnen Sie zwei Datensätze auf demselben 3D-Plot

Die Handlung ich hierfür ist der Suche bin: enter image description here

Ich benutze Anaconda und Jupiter, matplotlib 1.5.1.

Dies ist mein Code so weit:

from mpl_toolkits.mplot3d import Axes3D 
import mpl_toolkits.mplot3d as a3 
import matplotlib.pyplot as plt 
import cop 

class var1: 
    def __init__(self,b1, b2): 
     self.pt1 = copy.deepcopy(b1)  
     self.pt2 = copy.deepcopy(b2) 
     self.cords = (
      list(self.pt1 + [high]), # top-left 
      list(self.pt2 + [high]), # top-right 
      list(self.pt2 + [low]), # bottom-right 
      list(self.pt1 + [low]), # bottom-left 
      )    
    def drawFunction(self):  
     dataSet1 = a3.art3d.Poly3DCollection([self.cords]) 
     dataSet1.set_color('firebrick') 
     dataSet1.set_edgecolor('k') 
     ax.add_collection3d(dataSet1) #If you comment out this line- var2 will be shown. I`m trying to show one on top of the other 
     var2(self.pt1, self.pt2, high, low).drawFunction() 

class var2: 
    def __init__(self,b1, b2, high, low): 
     self.pt1 = copy.deepcopy(b1)  
     self.pt2 = copy.deepcopy(b2) 
     self.cords = (
      list(self.pt1 + [(high/2) + (high/4)]), # top-left 
      list(self.pt2 + [(high/2) + (high/4)]), # top-right 
      list(self.pt2 + [(high/2) - (high/4)]), # bottom-right 
      list(self.pt1 + [(high/2) - (high/4)]), # bottom-left 
      )  
    def drawFunction(self): 
     dataSet2 = a3.art3d.Poly3DCollection([self.cords]) 
     dataSet2.set_color('cornflowerblue') 
     dataSet2.set_edgecolor('k') 
     ax.add_collection3d(dataSet2) 

high = 500 
low = 0 
fig = plt.figure() 
ax = Axes3D(fig) 

i = 0 
while i<4: 
    if (i==0): 
     p1 = [0,200] 
     p2 = [0,0] 
    if (i==1): 
     p1 = [0,0] 
     p2 = [200,0] 
    if (i==2): 
     p1 = [200,0] 
     p2 = [200,200] 
    if (i==3): 
     p1 = [200,200] 
     p2 = [0,200] 

    var1(p1, p2).drawFunction() 
    i = i+1 

ax.set_xlim(0,200) 
ax.set_ylim(0, 200) 
ax.set_zlim(0, 1000) 
plt.show() 
+0

Bitte beachten Sie den Teil bearbeiten. – Yair

+0

Code wurde aktualisiert – Yair

Antwort

0

Beachten Sie, dass im Beispielcode sowohl die Zahlen vorhanden sind, können Sie sie sehen, indem Sie den Code in der folgenden Art und Weise Poly3DCollection([self.cords],alpha=0.5) ändern. Es ist nur so, dass die add_collection3d eine über die andere zieht, so dass Sie beide nicht sehen.

Ich habe keinen Weg gefunden, es zu übertreffen, aber Sie können here für eine mögliche Problemumgehung suchen.

BTW, der Code fehlt import copy und ax = a3.Axes3D(fig) zu arbeiten.