Introducción a Matplotlib¶

Matplotlib es una librería que permite la creación de figuras y gráficos de calidad mediante el uso de Python.

  • Permite la creación de gráficos de manera sencilla y eficiente
  • Permite la integración de gráficos y figuras en un Jupyter Notebook

Import¶

In [1]:
import matplotlib
import matplotlib.pyplot as plt
In [2]:
# Muestrar los gráficos integrados dentro de jupyter notebook
%matplotlib inline

Representación gráfica de datos¶

Si a la función de trazado se le da una matriz de datos, la usará como coordenadas en el eje vertical, y utilizará el índice de cada punto de datos en el array como la coordenada horizontal.

In [3]:
plt.plot([1, 2, 5, 7, 8, 3, 1])
plt.show()

También se puede proporcionar dos matrices: una para el eje horizontal, y otra para el eje vertical.

In [4]:
plt.plot([-3, -1, 0, 4, 7], [1, 4, 6, 7, 8])
plt.show()

Pueden modificarse las logitudes de los ejes para que la figura no se vea tan ajustada

In [5]:
plt.plot([-3, -1, 0, 4, 7], [1, 4, 6, 7, 8])
plt.axis([-4, 8, 0, 10]) # [xmin, xmax, ymin, ymax]
plt.show()

Se sigue el mismo procedimiento para pintar una función matemática

In [6]:
import numpy as np
x = np.linspace(-2, 2, 500)
y = x**2

plt.plot(x, y)
plt.show()

También pude modificarse el estilo de la gráfica para que contenga más información.

In [7]:
plt.plot(x, y)
plt.title("Square function")
plt.xlabel("x")
plt.ylabel("y = x**2")
plt.grid(True)
plt.show()

Pueden superponerse gráficas y cambiar el estilo de las líneas

In [8]:
import numpy as np
x = np.linspace(-2, 2, 500)
y = x**2
y2 = x + 1

plt.plot(x, y, 'b--', x, y2, 'g')
plt.show()
In [9]:
# Separando en diferentes lineas las funciones
import numpy as np
x = np.linspace(-2, 2, 500)
y = x**2
y2 = x + 1

plt.plot(x, y, 'b--')
plt.plot(x, y2, 'g')
plt.show()

Para poder diferenciar entre ambas funciones siempre es recomendable añadir una leyenda

In [10]:
import numpy as np
x = np.linspace(-2, 2, 500)
y = x**2
y2 = x + 1

plt.plot(x, y, 'b--', label="x**2")
plt.plot(x, y2, 'g', label="x+1")
plt.legend(loc="best") # La situa en la mejor localización
plt.show()

Tambien puede crearse dos graficas que no se superpongan. Estas graficas se organizan en un grid y se denominan subplots.

In [11]:
import numpy as np
x = np.linspace(-2, 2, 500)
y = x**2
y2 = x + 1

plt.subplot(1, 2, 1) # 1 rows, 1 columns, 1st subplot
plt.plot(x, y, 'b--')

plt.subplot(1, 2, 2) # 1 rows, 2 columns, 2nd subplot
plt.plot(x, y2, 'g')

plt.show()

Para que las gráficas no queden tan ajustadas, podemos hacer la figura más grande.

In [12]:
plt.figure(figsize=(14,6))

plt.subplot(1, 2, 1) # 1 rows, 1 columns, 1st subplot
plt.plot(x, y, 'b--')
plt.xlabel("x1", fontsize=14)
plt.ylabel("y1", fontsize=14)

plt.subplot(1, 2, 2) # 1 rows, 2 columns, 2nd subplot
plt.plot(x, y2, 'g')
plt.xlabel("x2", fontsize=14)
plt.ylabel("y2", fontsize=14)

plt.show()

Scatter plots¶

In [13]:
from numpy.random import rand

x, y = rand(2, 100)
plt.scatter(x, y)
plt.show()
In [14]:
from numpy.random import rand

x, y = rand(2, 100)
x2, y2 = rand(2, 100)

plt.scatter(x, y, c='red')

plt.scatter(x2, y2, c='blue')

plt.show()

Histogramas¶

In [16]:
data = [1, 1.1, 1.8, 2, 2.1, 3.2, 3, 3, 3, 3]

plt.subplot(211) # 2 rows, 1 columns, 1st subplot
plt.hist(data, bins = 10, rwidth=0.8)
plt.xlabel("Value")
plt.ylabel("Frequency")

plt.subplot(212) # 2 rows, 1 columns, 2nd subplot
plt.hist(data, bins = [1, 1.5, 2, 2.5, 3], rwidth=0.95)
plt.xlabel("Value")
plt.ylabel("Frequency")

plt.show()

Guardar las figuras¶

In [17]:
import numpy as np

x = np.linspace(-2, 2, 500)
y = x**2
y2 = x + 1

plt.plot(x, y, 'b--', label="x**2")
plt.plot(x, y2, 'g', label="x+1")
plt.legend(loc="best")

plt.savefig("mi_grafica.png", transparent=True)
In [ ]: