tiempo real matrices graficos grafico graficas graficar funcion dibujar coordenadas con python matplotlib

real - grafico con python



Matplotlib: Agregar ejes usando los mismos argumentos que los ejes anteriores (6)

El error aparece cuando crea el mismo objeto de eje más de una vez. En su ejemplo, primero crea dos objetos de subtrama (con el método plt.subplot).

type(plt.subplot(2, 1, 2)) Out: matplotlib.axes._subplots.AxesSubplot

Python establece automáticamente el último eje creado como predeterminado. Eje significa solo el marco para el gráfico sin datos. Es por eso que puede realizar plt.plot (datos). El diagrama de método (datos) imprime algunos datos en su objeto de eje. Cuando intentas imprimir nuevos datos en el mismo diagrama, no puedes usar plt.subplot (2, 1, 2) nuevamente, porque python intenta crear un nuevo objeto de eje por defecto. Entonces, lo que tiene que hacer es: Asignar cada subtrama a una variable.

ax1 = plt.subplot(2,1,1) ax2 = plt.subplot(2,1,2)

luego elija su "marco" en el que desea imprimir datos:

ax1.plot(data) ax2.plot(data+1) ax1.plot(data+2)

Si está interesado en trazar más gráficos (por ejemplo, 5) en una figura, simplemente cree primero una figura. Sus datos se almacenan en un Pandas DataFrame y crea para cada columna un nuevo elemento de eje en una lista. luego recorre la lista y traza en cada elemento del eje los datos y elige los atributos

import pandas as pd import matplotlib.pyplot as plt #want to print all columns data = pd.DataFrame(''some Datalist'') plt.figure(1) axis_list = [] #create all subplots in a list for i in range(data.shape[1]): axis_list.append(plt.subplot(data.shape[1],1,i+1) for i,ax in enumerate(axis_list): # add some options to each subplot ax.grid(True) #print into subplots ax.plot(data.iloc[:,[i]])

Quiero trazar datos, en dos subtramas diferentes. Después de trazar, quiero volver a la primera subtrama y trazar un conjunto de datos adicional en ella. Sin embargo, cuando lo hago, recibo esta advertencia:

MatplotlibDeprecationWarning: Agregar ejes usando los mismos argumentos que los ejes anteriores actualmente reutiliza la instancia anterior. En una versión futura, siempre se creará y devolverá una nueva instancia. Mientras tanto, esta advertencia puede ser suprimida y el comportamiento futuro asegurado, pasando una etiqueta única a cada instancia de los ejes. warnings.warn (mensaje, mplDeprecation, stacklevel = 1)

Puedo reproducir eso con un simple código:

import matplotlib.pyplot as plt import numpy as np # Generate random data data = np.random.rand(100) # Plot in different subplots plt.figure() plt.subplot(1, 2, 1) plt.plot(data) plt.subplot(1, 2, 2) plt.plot(data) plt.subplot(1, 2, 1) # Warning occurs here plt.plot(data + 1)

¿Alguna idea sobre cómo evitar esta advertencia? Yo uso matplotlib 2.1.0. Parece el mismo problema que here


El uso de plt.subplot(1,2,1) crea un nuevo eje en la figura actual. La advertencia de desaprobación indica que en una versión futura, cuando lo llame por segunda vez, no tomará el eje creado anteriormente, sino que lo sobrescribirá.

Puede guardar una referencia a la primera instancia del eje asignándola a una variable.

plt.figure() # keep a reference to the first axis ax1 = plt.subplot(1,2,1) ax1.plot(Data) # and a reference to the second axis ax2 = plt.subplot(1,2,2) ax2.plot(Data) # reuse the first axis ax1.plot(Data+1)


Este es un buen ejemplo que muestra el beneficio de usar la API orientada a objetos de matplotlib .

import numpy as np import matplotlib.pyplot as plt # Generate random data data = np.random.rand(100) # Plot in different subplots fig, (ax1, ax2) = plt.subplots(1, 2) ax1.plot(data) ax2.plot(data) ax1.plot(data+1) plt.show()

Nota: es más pitónico que los nombres de las variables comiencen con una letra minúscula, por ejemplo, data = ... lugar de Data = ... ver PEP8


Simplemente puede llamar a plt.clf() antes de trazar las cosas. Esto borrará todas las parcelas existentes.


Tenga en cuenta que en este caso, la advertencia es un falso positivo. Idealmente, no debería plt.subplot(..) en el caso de que utilice plt.subplot(..) para reactivar una subtrama que se ha creado previamente.

La razón por la que ocurre esta advertencia es que plt.subplot y fig.add_subplot() toman la misma ruta de código internamente. La advertencia es para este último, pero no para el primero.

Para leer más sobre esto, vea los números 12513 . En pocas palabras, la gente está trabajando en ello, pero no es tan fácil como inicialmente se pensaba desacoplar las dos funciones. Por el momento, simplemente puede ignorar la advertencia si es activada por plt.subplot() .


Yo tuve el mismo problema. Solía ​​tener el siguiente código que generaba la advertencia:

(tenga en cuenta que la Image variable es simplemente mi imagen guardada como matriz numpy)

import numpy as np import matplotlib.pyplot as plt plt.figure(1) # create new image plt.title("My image") # set title # initialize empty subplot AX = plt.subplot() # THIS LINE RAISED THE WARNING plt.imshow(Image, cmap=''gist_gray'') # print image in grayscale ... # then some other operations

y lo resolví, modificando así:

import numpy as np import matplotlib.pyplot as plt fig_1 = plt.figure(1) # create new image and assign the variable "fig_1" to it AX = fig_1.add_subplot(111) # add subplot to "fig_1" and assign another name to it AX.set_title("My image") # set title AX.imshow(Image, cmap=''gist_gray'') # print image in grayscale ... # then some other operations