Matplotlib-Plotten in der Schleife, Entfernen von Farbbalken, aber Whitespace bleibt

Mein Code ist etwas (ungefähr) wie folgt:

UPDATE: Ich habe das mit einem echten Mock-up-Code, der mein allgemeines Problem widerspiegelt, wiederhergestellt. Auch erkannte, dass die Farbbalken-Erstellung in der eigentlichen Schleife ist, da sonst nichts zuzuordnen ist. Tut mir leid für den Code vor, tippte es in hektische Verzweiflung am Ende des Arbeitstages ein :).

import numpy import matplotlib as mplot import matplotlib.pyplot as plt import os #make some mock data x = np.linspace(1,2, 100) X, Y = np.meshgrid(x, x) Z = plt.mlab.bivariate_normal(X,Y,1,1,0,0) fig = plt.figure() ax = plt.axes() ''' Do some figure-related stuff that take up a lot of time, I want to avoid having to do them in the loop over and over again. They hinge on the presence of fig so I can't make new figure to save each time or something, I'd have to do them all over again. ''' for i in range(1,1000): plotted = plt.plot(X,Y,Z) cbar = plt.colorbar(ax=ax, orientation = 'horizontal') plt.savefig(os.path.expanduser(os.path.join('~/', str(i)))) plt.draw() mplot.figure.Figure.delaxes(fig, fig.axes[1]) #deletes but whitespace remains ''' Here I need something to remove the colorbar otherwise I end up with +1 colorbar on my plot at every iteration. I've tried various things to remove it BUT it keeps adding whitespace instead so doesn't actually fix anything. ''' 

Hat jemand dieses Problem vorher getan und es geschafft, es zu beheben? Hoffentlich ist das genug für eine Vorstellung von dem Problem, ich kann mehr Code posten, wenn nötig, aber dachte, es wäre weniger von einem Unordnung, wenn ich nur ein Übersichtsbeispiel gib.

Vielen Dank.

  • Erzeugen von Konturdiagrammen für X, Y-Daten in Python
  • Importieren von matplotlib.pyplot und BeautifulSoup mit cxFreeze
  • Zeichnen Sie eine 3D-Oberfläche aus {x, y, z} -Zerstreuerdaten in Python
  • Pandas grafische Darstellung von Zeiträumen, mit senkrechten Linien zu ausgewählten Terminen
  • Warum ändert sich matplotlib.pyploy.imshow die Achsen?
  • Plotten eines Python dict in der Reihenfolge der Schlüsselwerte
  • 2 Solutions collect form web for “Matplotlib-Plotten in der Schleife, Entfernen von Farbbalken, aber Whitespace bleibt”

    colorbar() erlaubt Ihnen, explizit colorbar() , welche Achse in – Sie können dies verwenden, um sicherzustellen, dass sie immer an der gleichen Stelle erscheinen und keinen Raum von einer anderen Achse stehlen. Außerdem kannst du das .mappable Attribut einer vorhandenen Farbleiste zurücksetzen, anstatt es jedes Mal neu zu definieren.

    Beispiel mit expliziten Achsen:

     x = np.linspace(1,2, 100) X, Y = np.meshgrid(x, x) Z = plt.mlab.bivariate_normal(X,Y,1,1,0,0) fig = plt.figure() ax1 = fig.add_axes([0.1,0.1,0.8,0.7]) ax2 = fig.add_axes([0.1,0.85,0.8,0.05]) ... for i in range(1,5): plotted = ax1.pcolor(X,Y,Z) cbar = plt.colorbar(mappable=plotted, cax=ax2, orientation = 'horizontal') #note "cax" instead of "ax" plt.savefig(os.path.expanduser(os.path.join('~/', str(i)))) plt.draw() 

    Ich hatte ein sehr ähnliches Problem, das ich endlich gelernt habe, indem ich ein Colorbar-Achsen in ähnlicher Weise definiere: Mehrere Imshow-Subplots, jeweils mit Colorbar

    Der Vorteil im Vergleich zu der Antwort von mdurant ist, dass es sicherstellt, die Achsenposition manuell zu definieren.

     import matplotlib.pyplot as plt import IPython.display as display from mpl_toolkits.axes_grid1 import make_axes_locatable from pylab import * %matplotlib inline def plot_res(ax,cax): plotted=ax.imshow(rand(10, 10)) cbar=plt.colorbar(mappable=plotted,cax=cax) fig, axarr = plt.subplots(2, 2) cax1 = make_axes_locatable(axarr[0,0]).append_axes("right", size="10%", pad=0.05) cax2 = make_axes_locatable(axarr[0,1]).append_axes("right", size="10%", pad=0.05) cax3 = make_axes_locatable(axarr[1,0]).append_axes("right", size="10%", pad=0.05) cax4 = make_axes_locatable(axarr[1,1]).append_axes("right", size="10%", pad=0.05) # plt.subplots_adjust(left=0, bottom=0, right=1, top=1, wspace=0.3, hspace=0.3) N=10 for j in range(N): plot_res(axarr[0,0],cax1) plot_res(axarr[0,1],cax2) plot_res(axarr[1,0],cax3) plot_res(axarr[1,1],cax4) display.clear_output(wait=True) display.display(plt.gcf()) display.clear_output(wait=True) 
    Python ist die beste Programmiersprache der Welt.