mlab

2012-10-17 21 views
6

का उपयोग कर मायावी में पाठ के साथ कई बिंदुओं को एनोटेट करना मैं mayavi.mlab का उपयोग कर पॉइंट 3 डी() फ़ंक्शन के साथ प्लॉट किए गए अंक एनोटेट करने का प्रयास कर रहा हूं। प्रत्येक बिंदु एक लेबल से जुड़ा हुआ है जिसे मैं text3d() फ़ंक्शन का उपयोग करके बिंदुओं के बगल में प्लॉट करना चाहता हूं। स्थानों की प्लॉटिंग तेजी से है, लेकिन mlab.text3d() फ़ंक्शन निर्देशांक के एरे स्वीकार करने के लिए प्रतीत नहीं होता है, तो मैं अंक से अधिक पाश करने के लिए है और व्यक्तिगत रूप से पाठ साजिश है, जो बहुत धीमी है:mlab

 for i in xrange(0, self.n_labels): 
      self.mlab_data.append(
       mlab.points3d(pX[self.labels == self.u_labels[i], 0], 
           pX[self.labels == self.u_labels[i], 1], 
           pX[self.labels == self.u_labels[i], 2], 
           color=self.colours[i], 
           opacity=1, 
           scale_mode="none", 
           scale_factor=sf)) 

      idcs, = np.where(self.labels == self.u_labels[i]) 
      for n in idcs.flatten(): 
       mlab.text3d(pX[n, 0], 
          pX[n, 1], 
          pX[n, 2], 
          "%d" % self.u_labels[i], 
          color=self.colours[i], 
          opacity=1, 
          scale=sf) 

कोई विचार मैं इसे कैसे गति दे सकता हूं? साथ ही, क्या एक किंवदंती जोड़ना संभव है (उदाहरण के लिए matplotlib में), मुझे दस्तावेज़ों में कुछ भी नहीं मिला।

धन्यवाद,

पैट्रिक

उत्तर

5

जिस तरह से आप ऊपर यह कर रहे हैं दृश्य हर बार जब आप एक बिंदु या पाठ साजिश प्रस्तुत करना होगा। यह धीमा है। तुम्हें पता है, दृश्य प्रतिपादन निष्क्रिय कर सकते हैं अंकन और फिर figure.scene.disable_render द्वारा दृश्य प्रस्तुत करना = सही/गलत:

import scipy 
    from mayavi import mlab 

    X = 100 * scipy.rand(100, 3) 
    figure = mlab.figure('myfig') 
    figure.scene.disable_render = True # Super duper trick 
    mlab.points3d(X[:,0], X[:,1], X[:,2], scale_factor=0.4) 
    for i, x in enumerate(X): 
     mlab.text3d(x[0], x[1], x[2], str(i), scale=(2, 2, 2)) 
    figure.scene.disable_render = False # Super duper trick 

मैं मार्फिक में इस चाल और चित्रा कक्षा में दूसरों का उपयोग व्यूअर https://github.com/duanemalcolm/morphic/blob/master/morphic/viewer.py

कोड में एक और अच्छी चाल मौजूदा वस्तुओं का पुन: उपयोग करना है, यानी, यदि आपने पहले से ही टेक्स्ट प्लॉट किया है, तो उन्हें दोहराना न करें, बस अपनी स्थिति और टेक्स्ट विशेषताओं को अपडेट करें। इसका मतलब है mlab ऑब्जेक्ट को सहेजना। आप देख सकते हैं कि मैं इसे morphic में कैसे करता हूं। दर्शक।