8.4 matplotlib

matplotlib es el paquete Python más utilizado en el ámbito de la ciencia de datos para representaciones gráficas.

 

La forma más común de importar esta librería es usar el alias plt de la siguiente manera:

Importante: Si bien podemos utilizar matplotlib en el intérprete habitual de Python, suele ser muy frecuente trabajar con esta librería mediante entornos Jupyter, ya que facilitan la visualización de los gráficos en su interfaz de usuario.

  • Figura

La figura es el elemento base sobre el que se construyen todos los gráficos en matplotlib. Veamos cómo crearla:

Podemos observar que la resolución (por defecto) de la figura es de 640×480 píxeles y que no dispone de ningún eje («0 Axes»).

Importante:       El término «axes» hace referencia a un conjunto de ejes. Puede resultar

confuso en español y he decidido asignar el nombre marco cuando haga referencia a «axes».

La resolución final de una figura viene determinada por su altura (height) y anchura (width) especificadas en pulgadas[2] que, a su vez, se multiplican por los puntos por pulgada o dpi. Veamos el funcionamiento:

>>> fig

<Figure size 640×480 with 0 Axes>

>>> fig.get_figwidth() # pulgadas 6.4

>>> fig.get_figheight() # pulgadas 4.8

>>> fig.get_dpi()                           # dots per inch

100.0

(continué en la próxima página)
(proviene de la página anterior)

>>> fig.get_figwidthO * fig.dpi, fig.get_figheightO * fig.dpi (640.0, 480.0)

Importante: Si utilizamos entornos de desarollo basados en Jupyter, los valores por defecto son distintos:

  • Ancho de figura: 6 in
  • Alto de figura: 4 in
  • DPI: 75
  • Resolución: 450×300 px

Por tanto, cuando creamos una figura podemos modificar los parámetros por defecto para obtener la resolución deseada:

Si nos interesa que cualquier figura tome unos valores concretos de resolución, podemos modificar los valores por defecto del entorno. Para ello, matplotlib hace uso de un diccionario plt.rcParams que contiene los parámetros globales de configuración. Veamos cómo modificarlo:

>>> plt.rcParams[‘figure.figsize’]

[6.4, 4.8]

>>> plt.rcParams[‘figure.dpi’]

100.0

>>> plt.rcParams[‘figure.figsize’] = (10, 5)

>>> plt.rcParams[‘figure.dpi’] = 300                                            # res. final: 3000×1500 px

>>> fig.get_figwidth()

10.0

>>> fig.get_figheight()

5.0

>>> fig.dpi

300.0

  • Marcos

Para poder empezar a graficar necesitamos tener, al menos, un marco. Utilizaremos la función add_subplot() que requiere pasar como parámetros el número de filas, el número de columnas y el marco activo:

 

Para comenzar vamos a trabajar únicamente con un marco:

>>> fig = plt.figure()

>>> ax = fig.add_subplot(1, 1,1)               # equivalente a fig.add_subplot(111)

>>> ax

<AxesSubplot:>

>>> fig

<Figure size 640×480 with 1 Axes>

Truco: Suele ser habitual encontrar ax como nombre de variable del «axes» devuelto por la función add_subplot().

 

LO -i——————————————————————————

0.3 –

0.6 –

  1. 4 –

0.2 –

o.o -I—————– 1—————- 1—————- 1—————– 1—————–

0.0                     0.2                   0.4                   0.6                    0.0                    1.0

Nota: La escala por defecto de cada eje va de 0 a 1 con marcas cada 0.2

Ahora vamos a generar 4 marcos sobre los que fijaremos un título identificativo: >>> fig = plt.figure()

>>> for i in range(1, 5):

… ax = fig.add_subplot(2, 2, i)

… ax.set_title(f’Subplot i}’)

>>> fig.tight_layout(pad=1) # sólo para que no se solapen los títulos >>> fig

<Figure size 640×480 with 4 Axes>

 

Atajo para subgráficos

Matplotlib nos ofrece una forma compacta de crear a la vez tanto la figura como los marcos que necesitemos.

Para ello utilizaremos la función plt.subplots() que recibe como parámetros el número de filas y el número de columnas para la disposición de los marcos, y devuelve una tupla con la figura y los marcos.

En el siguiente ejemplo creamos una figura con un único marco:

>>> fig, ax = plt.subplots(1, 1)

>>> fig

<Figure size 640×480 with 1 Axes>

>>> ax

<AxesSubplot:>

Truco: Si invocamos la función plt.subplots() sin parámetros, creará (por defecto) un
único marco.

En el siguiente ejemplo creamos una figura con 6 marcos en disposición de 2 filas por 3 columnas:

Nota:      Se podría ver la función subplots() como una combinación de figure() +

add_subplot().

Etiquetas

Dentro de un marco también es posible fijar las etiquetas de los ejes (X e Y). Veamos cómo hacerlo:

 

 

 

Gráfico en blanco

  1. n———————————————————–

0.3 –

0.2 –

Ejes

Un marco (2D) está compuesto por dos ejes: eje X e eje Y. Podemos acceder a cada eje mediante sendos atributos:

Rejilla

En cada eje podemos activar o desactivar la rejilla, así como indicar su estilo. En primer lugar vamos a activar la rejilla en ambos ejes:

>>> ax.xaxis.grid(True)

>>> ax.yaxis.grid(True)

Esto sería equivalente a:

Y obtendríamos una figura con la rejilla (por defecto):

 

 

Truco: Las funciones de matplotlib que actúan como «interruptores» tienen por defecto el valor verdadero. En este sentido ax.grid() invocada sin parámetros hace que se muestre la rejilla. Esto se puede aplicar a muchas otras funciones.

Supongamos ahora que queremos personalizar la rejilla con estilos diferentes en cada eje:

 

 

Marcas

[1] Foto original de portada por Customerbox en Unsplash.

[2] Se suele usar el término inglés «inches».

Publicaciones Similares