Los nombres de los objetos
Matplotlib está fuertemente orientado a objetos y sus objetos principales son la figura y los ejes (encuentro el nombreaxes
un poco engañoso, pero probablemente sea solo yo).
Puede pensar en la figura como un lienzo , del cual normalmente especifica las dimensiones y posiblemente, por ejemplo, el color de fondo, etc. figura , esencialmente de dos maneras, colocando otros objetos en él (principalmente ejes , pero también etiquetas de texto, etc.) y guardar su contenido con savefig
.
Se puede pensar en un eje como una especie de navaja suiza, un objeto práctico que ofrece una herramienta (por ejemplo .plot
, .scatter
,.hist
etc) para todo, en su mayoría. Puede colocar uno, dos, ... muchos ejes dentro de una figura usando uno de los muchos métodos diferentes.
La plt
interfaz
La interfaz de procedimiento plt se desarrolló originalmente para imitar la interfaz MATLAB ™, pero no es realmente diferente de la interfaz orientada a objetos, incluso si no hace una referencia directa a los objetos principales (es decir, una figura y un eje ), estos objetos son instancia automáticamente y cada método plt se traduce, esencialmente, a una llamada de uno de los métodos de los objetos fundamentales subyacentes: por ejemplo, a plt.plot()
es unhidden_axes.plot
a plt.savefig
es a hidden_figure.savefig
.
En todo momento puedes controlar estos objetos ocultos usando plt.gcf
yplt.gca
, y esto a veces es necesario cuando uno de los métodos de objeto no se ha portado a un método en el espacio de nombres plt .
Me gustaría agregar que el espacio de nombres plt contiene también una serie de métodos convenientes para instanciar, de diferentes maneras, la figura y ejes .
Tus ejemplos
1er camino
plt.plot(x, y)
Aquí solo usa la interfaz plt , solo puede usar un solo eje en cada figura , pero esto es lo que quiere cuando está haciendo una exploración de sus datos, una receta rápida que hace el trabajo ...
2do camino
ax = plt.subplot()
ax.plot(x, y)
Aquí utiliza un método de conveniencia en el espacio de nombres plt para dar un nombre (y un identificador) a su objeto de ejes , pero por cierto también hay una figura oculta . Luego puede usar el objeto axes para trazar, hacer un histograma, etc., todo lo que puede hacer con la interfaz plt , pero también puede acceder a todos sus atributos y modificarlos con mayor libertad.
3er camino
figure = plt.figure()
new_plot = figure.add_subplot(111)
new_plot.plot(x, y)
Aquí comienza a crear instancias de una figura usando un método de conveniencia en el espacio de nombres plt y luego usa solo la interfaz orientada a objetos.
Es posible omitir el método de conveniencia plt ( matplotlib.figure.Figure
) pero luego debe ajustar la figura para una mejor experiencia interactiva (después de todo, es un método de conveniencia ).
Recomendaciones personales
Sugiero desnudo plt.plot
, plt.scatter
en el contexto de una sesión interactiva, posiblemente usando IPython con su %matplotlib
comando mágico, y también en el contexto de un cuaderno exploratorio de Jupyter.
Por otro lado, el enfoque orientado a objetos, más algunos plt
métodos de conveniencia, es el camino a seguir.
- si tiene un problema permanente que resolver de una vez por todas con una disposición personalizada de subtramas finamente ajustadas,
- si desea incrustar Matplotlib en la interfaz de usuario de un programa que escriba.
Hay una gran área gris entre estos extremos y si me preguntas qué hacer, simplemente diría "Depende" ...