Manual de introducción a matplotlib.pyplot (III): Configuración del gráfico

Este artículo se actualizó el 2020/04/18 para usar las últimas versiones de las bibliotecas que se comentan.

Esto pretende ser un tutorial del módulo pyplot de la librería matplotlib. El tutorial lo dividiremos de la siguiente forma (que podrá ir cambiando a medida que vayamos avanzando).

  1. Primeros pasos
  2. Creando ventanas, manejando ventanas y configurando la sesión
  3. Configuración del gráfico
  4. Tipos de gráfico I
  5. Tipos de gráfico II
  6. Tipos de gráfico III
  7. Tipos de gráfico IV
  8. Texto y anotaciones (arrow, annotate, table, text…)
  9. Herramientas estadísticas (acorr, cohere, csd, psd, specgram, spy, xcorr, …)
  10. Eventos e interactividad (connect, disconnect, ginput, waitforbuttonpress…)
  11. Miscelánea

[[Para este tutorial se ha usado python 3.7.6, ipython 7.13.0, numpy 1.17.2 y matplotlib 3.1.1]

[DISCLAIMER: Muchos de los gráficos que vamos a representar no tienen ningún sentido físico y los resultados solo pretenden mostrar el uso de la librería].

En todo momento supondremos que se ha iniciado la sesión y se ha hecho:

Hasta ahora hemos visto como podemos configurar la ventana y la sesión, en esta ocasión nos vamos a centrar en configurar el área del gráfico. Para ello vamos a empezar con plt.axes(), que sirve para ‘llamar’ y/o configurar a un área de gráfico. Podemos definir la posición, el tamaño, el color del área del fondo,…:

El resultado es el siguiente:

Como podéis imaginar, podemos usar plt.axes() como sustituto de plt.subplot() si queremos dibujar gráficos que no tengan que tener una forma ‘regular’ dentro de la ventana. Si ahora queremos borrar el área del gráfico podemos usar plt.delaxes(), si queremos borrar el contenido que hay en el área del gráfico podemos usar plt.cla() y si queremos que no aparezca la ‘caja’ donde se dibuja el gráfico podemos usar plt.box() (si no hay ‘caja’ y queremos que aparezca podemos llamar a plt.box() y volverá a aparecer la ‘caja’).

El área del gráfico puede ser un área rectangular o un área para un gráfico polar (ver ejemplo).

Podemos colocar una rejilla que nos ayude a identificar mejor las áreas del gráfico mediante plt.grid() (en un gráfico polar deberemos usar plt.rgrids() y plt.thetagrids()).

Si os habéis fijado, matplotlib dibuja los ejes de forma que se ajusten al gráfico pero quizá eso no es lo que nos interese en algunos momentos, para ello podemos hacer uso de plt.axis(). Nos permite definir la longitud de los ejes, si queremos que aparezcan los mismos, si queremos que estos estén escalados,… Si solo nos interesa configurar uno de los ejes y dejar que el otro lo maneje matplotlib podemos usar plt.xlim(), plt.xscale(), plt.ylim() y plt.yscale(). Si queremos dejar el eje x o el eje y con escala logarítmica podemos usar, respectivamente, plt.semilogx() o plt.semilogy(). Podemos dibujar un segundo eje x o un segundo eje y usando plt.twinx() o plt.twiny(), respectivamente. También podemos establecer unos márgenes alrededor de los límites de los ejes usando plt.margins(). Por último, podemos etiquetar nuestros ejes con plt.xlabel() y plt.ylabel(). Veamos un ejemplo de algunas de estas cosas:

Ahora vamos a ver plt.axvline(), plt.axvspan(), plt.axhline(), plt.axhspan(). ¿Y para qué sirven estas ‘cosas’? Pensad que, por ejemplo, queréis resaltar una zona de vuestro gráfico para focalizar la atención en esa área. Eso lo podríamos hacer usando lo anterior. plt.axvline() y plt.axhline() dibujan líneas verticales y horizontales en la x o en la y que le digamos mientras que plt.axvspan() y plt.axhspan() dibujan recuadros entre las coordenadas x o y que queramos, respectivamente.

Y, ¿cómo podemos controlar el texto básico sobre el gráfico? Hay muchas formas de meter texto y controlar las etiquetas de forma básica y sencilla. En algunos momentos hemos visto plt.legend(), también existe plt.figlegend(). Yo siempre uso plt.legend() el 100% de las veces. Para usos avanzados podéis mirar este enlace y este otro enlace. Si queremos poner un título al gráfico podemos usar plt.title() y plt.suptitle(). Si queremos poner título a los ejes podemos usar plt.xlabel() y plt.ylabel() para los ejes x e y, respectivamente. Por último, para controlar los valores de las etiquetas que se ponen sobre los ejes dispones de plt.locator_params(), plt.minorticks_on(), plt.minorticks_off(), plt.tick_params(), plt.tick_label_format(), plt.xticks() y plt.yticks(). Vamos a manejar la mayor parte de estas funciones mediante un ejemplo para que se vea más claro su uso. Imaginemos que queremos representar el valor medio diario de una variable durante un año, en el eje x queremos que aparezca solo los meses en el día del año en que empieza el mes:

Cuyo resultado será algo parecido a lo siguiente:

Y con esto hemos visto, más o menos, la forma básica de configurar los elementos del gráfico. Si no los habéis visto aún, podéis leer el capítulo 1 y el capítulo 2 de esta serie.

Si quieres puedes pasar a la siguiente parte.

4 pensamientos sobre “Manual de introducción a matplotlib.pyplot (III): Configuración del gráfico”

  1. hola!!! antes que nada felicidades por tan buen tutorial de python en español, una pregunta, no he encontrado como es que puedes limitar el intervalo de tus ejes? es decir tengo datos en el eje x que van de 0 a 150, que instrucción se le debe dar para que grafique de 0 a 150, en intervalos de 10. Se que usando plt.xlim() y plt.ylim() puedo ajustar los limites y hasta ahora asi lo he hecho. Pero a veces me grafica en intervalos de 20 en 20, y yo los quisiera de 10 en 10, como puedo especificar eso?
    De verdad me ayudarías mucho si me pudieras orientar sobre esto.

    1. Bueno, nuestro experto en matplotlib es kiko 😛 pero creo que he encontrado cómo se haría.
      Hay que utilizar o bien la función pyplot.xticks o bien el método Axes.set_xticks y pasarle como argumento una lista de los valores donde quieres que estén colocados los «ticks» (que no sé cómo se diría en castellano). Así, para colocarlos de 10 en 10 entre 0 y 150, yo haría
      [sourcecode language=”python”]
      plt.xticks(10 * arange(16))
      [/sourcecode]
      Y recuerda que, si tienes preguntas sobre Python en general, siempre puedes preguntar en Python Majibu 🙂
      Un saludo!

      1. muchisisisimas gracias!!!! De verdad GRACIAS por responder tan pronto y ayudarme con esto, ya lo probe y funciona bien!! :D! excelente blog

  2. Pingback: Primeros pasos Graficando con Numpy | La Shell del Bit Pegajoso

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

seventy seven − seventy four =