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