Aktualisieren Sie eine Artiste (Line2D) auf eine Figur, ohne die ganze Figur neu zu zeichnen – axes.draw_artist () stürzt ab

Ich möchte, dass ein Line (Line2D) Objekt mit der aktuellen Cursorposition auf mehreren Achsen einer Figur verschoben wird. Die Art, wie ich es jetzt mache, ist, die ganze Figur jedes Mal neu zu zeichnen, wenn sich der Cursor bewegt, indem er anruft

fig.canvas.draw() 

Meine Figur besteht aus 14 Panels, unter denen 10 eine Linie hat, die sich mit dem Cursor bewegen muss, und das ist sehr lang.

Ich habe mich gefragt, wie man nur die Zeilen aktualisieren und das ganze nicht neu zeichnen kann.

Also habe ich versucht zu verwenden

 ax.draw_artist(line) 

Aber das stürzt ab. Hier ist ein kleines Beispiel:

 fig,ax = subplots() line = Line2D([0.3,0.3],[0.1,0.8]) ax.add_artist(line) fig.canvas.draw() #here I see the line on the figure ok # I update the position of the line line.set_xdata([0.6,0.8]) # now draw the line (this should add another one (*)) ax.draw_artist(line) 

Diese letzte Zeile verursacht folgende Fehlermeldung:

————————————————– ————————- RuntimeError Traceback (letzter Anruf zuletzt) ​​in () —-> 1 ax.draw_artist (Zeile)

/Users/Heimdall/anaconda/lib/python2.7/site-packages/matplotlib/axes.pyc in draw_artist (Selbst, a) 2096 "" "2097 behaupten self._cachedRenderer ist nicht Keine -> 2098 a.draw (self. _cachedRenderer) 2099 2100 def redraw_in_frame (Selbst):

/Users/Heimdall/anaconda/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper (Künstler, Renderer, * args, ** kwargs) 53 def draw_wrapper (Künstler, Renderer, * args, ** kwargs ): 54 vor (Künstler, Renderer) —> 55 Unentschieden (Künstler, Renderer, * Args, ** Kwargs) 56 nach (Künstler, Renderer) 57

/Users/Heimdall/anaconda/lib/python2.7/site-packages/matplotlib/lines.pyc in draw (Selbst, Renderer) 524 525 renderer.open_group ('line2d', self.get_gid ()) -> 526 gc = Renderer.new_gc () 527 self._set_gc_clip (gc) 528

/Users/Heimdall/anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.pyc in new_gc (Selbst) 95 96 def new_gc (Selbst): —> 97 self.gc.save () 98 Self.gc.set_hatch (Keine) 99 self.gc._alpha = 1.0

RuntimeError: CGContextRef ist NULL

Ich bin mir nicht sicher, woher dieser Fehler kommt?

Auch habe ich gesehen, dass ich irgendwie die Leinwand retten sollte, bevor die erste Zeile gezeichnet wird und sie jedesmal wiederherstellen werde, wenn ich es wieder zeichne, also nur eine Zeile erscheint. Ich habe gesehen, dass dies mit getan werden könnte:

  background = canvas.copy_from_bbox(ax.bbox) 

Und wiederherstellen mit

 canvas.restore_region(background) 

Aber ich habe keine dieser beiden Methoden im Objekt 'Leinwand'. Ist das ein Problem mit dem MacOSX-Backend?

Ich habe matplotlib 1.3.1 mit der Verteilung anaconda auf macOS 10.9 installiert.

Auch ich habe gesagt, ich könnte verwenden:

 fig.canvas.blit(line.clipbox) 

Um die Linie an ihrer neuen Position zu zeichnen, aber das macht absolut nichts.

  • Wie kann ich die Schriftart des Tisches mit matplotlib.pyplot ändern?
  • IPython + pylab / matplotlib Animationen hängen
  • Wie benutzt man eine (zufällige) * .otf oder * .ttf Schriftart in matplotlib?
  • Matplotlib läuft aus dem Gedächtnis, wenn er in einer Schleife plottet
  • Wie sage ich matplotlib, dass ich mit einer Handlung fertig bin?
  • Wie zeichnet man ein Rechteck auf einer datetime Achse mit matplotlib?
  • One Solution collect form web for “Aktualisieren Sie eine Artiste (Line2D) auf eine Figur, ohne die ganze Figur neu zu zeichnen – axes.draw_artist () stürzt ab”

    Also die einzige Lösung, die ich gefunden habe, ist, Anaconda aufzugeben und alles mit Macports und mit dem Backend qt4 neu zu installieren.

     sudo port install py27-matplotlib +qt4 
    Python ist die beste Programmiersprache der Welt.