¿Cómo actualizar barchart en matplotlib?

Tengo un gráfico de barras, con muchas propiedades personalizadas (etiqueta, ancho de línea, edgecolor)

import matplotlib.pyplot as plt fig = plt.figure() ax = plt.gca() x = np.arange(5) y = np.random.rand(5) bars = ax.bar(x, y, color='grey', linewidth=4.0) ax.cla() x2 = np.arange(10) y2 = np.random.rand(10) ax.bar(x2,y2) plt.show() 

Con las gráficas ‘normales’ usaría set_data() , pero con el gráfico de barras recibí un error: AttributeError: 'BarContainer' object has no attribute 'set_data'

No quiero simplemente actualizar las alturas de los rectangularjs, quiero trazar rectangularjs totalmente nuevos. Si utilizo ax.cla (), todas mis configuraciones (ancho de línea, color edgec, título …) también se pierden, no solo mis datos (rectangularjs), y para borrar muchas veces, y restablecer todo hace que mi progtwig se retrase. Si no uso ax.cla() , la configuración permanece, el progtwig es más rápido (no tengo que configurar mis propiedades todo el tiempo), pero los rectangularjs están dibujados uno del otro, lo cual no es bueno.

¿Me puede ayudar con eso?

En su caso, las bars son solo un BarContainer , que es básicamente una lista de parches Rectangle . Para eliminarlos y mantener todas las demás propiedades de ax , puede recorrer el contenedor de barras y llamar a eliminar en todas sus entradas o como ImportanceOfBeingErnest señaló simplemente eliminar el contenedor completo:

 import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = plt.gca() x = np.arange(5) y = np.random.rand(5) bars = ax.bar(x, y, color='grey', linewidth=4.0) bars.remove() x2 = np.arange(10) y2 = np.random.rand(10) ax.bar(x2,y2) plt.show()