Matplotlib: Trazar gráficos de líneas múltiples en escalas iguales y diferentes

En este tutorial, veremos cómo trazar gráficos de líneas múltiples en Matplotlib. Graficaremos en la misma escala, así como en diferentes escalas y múltiples ejes Y, a través de ejemplos.

Introducción

Matplotlib es una de las bibliotecas de visualización de datos más utilizadas en Python. Desde visualizaciones simples a complejas, es la biblioteca de referencia para la mayoría.

En este tutorial, echaremos un vistazo a cómo trazar múltiples gráficos de líneas en Matplotlib - en los mismos ‘Ejes’ o ‘Figuras’.

Si desea leer más sobre cómo trazar diagramas de líneas en general, así como personalizarlos, asegúrese de leer nuestra guía sobre [Trazar gráficos de líneas con Matplotlib](/tutorial-y-ejemplos-de-trazado-de -líneas-de-matplotlib/).

Trazar gráficos de líneas múltiples en Matplotlib

Dependiendo del estilo que esté usando, OOP o estilo MATLAB, usará la instancia plt o la instancia ax para trazar, con el mismo enfoque.

Para trazar múltiples diagramas de líneas en Matplotlib, simplemente llame repetidamente a la función plot(), que aplicará los cambios al mismo objeto Figura:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5, 6]
y = [2, 4, 6, 5, 6, 8]
y2 = [5, 3, 7, 8, 9, 6]

fig, ax = plt.subplots()

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

Sin configurar ningún indicador de personalización, se aplicará el mapa de colores predeterminado, dibujando ambos diagramas de líneas en el mismo objeto Figura y ajustando el color para diferenciarlos:

Ahora, generemos algunas secuencias aleatorias usando Numpy, y personalicemos un poco los diagramas de líneas estableciendo un color específico para cada uno y etiquetándolos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()

No tenemos que proporcionar los valores del eje X a un gráfico de líneas, en cuyo caso, se aplicarán los valores de 0..n, donde n es el último elemento en los datos que está Graficado. En nuestro caso, tenemos dos secuencias de datos: line_1 y line_2, que se trazarán en el mismo eje X.

Durante el trazado, les hemos asignado colores, usando el argumento color, y etiquetas para la leyenda, usando el argumento label. Esto resulta en:

Trazar parcelas de varias líneas con diferentes escalas {#trazar varias parcelas de líneas con diferentes escalas}

A veces, es posible que tenga dos conjuntos de datos, aptos para gráficos de líneas, pero sus valores son significativamente diferentes, lo que dificulta la comparación de ambas líneas. Por ejemplo, si línea_1 tuviera una secuencia de números que aumentara exponencialmente, mientras que línea_2 tuviera una secuencia que aumentara linealmente, seguramente y con suficiente rapidez, línea_1 tendría valores mucho más grandes que línea_2, que este último se desvanecería. vista.

Usemos Numpy para hacer una secuencia de números que aumente exponencialmente, y grafíquela junto a otra línea en los mismos ‘Ejes’, linealmente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import matplotlib.pyplot as plt
import numpy as np

linear_sequence = np.linspace(0, 10, 10)
# [0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 10]
exponential_sequence = np.exp(linear_sequence)
# [1.00e+00, 3.03e+00, 9.22e+00, 2.80e+01, 8.51e+01, 2.58e+02, 7.85e+02, 2.38e+03, 7.25e+03, 2.20e+04]

fig, ax = plt.subplots()

ax.plot(linear_sequence)
ax.plot(exponential_sequence)
plt.show()

Ejecutar este código da como resultado:

El crecimiento exponencial en la secuencia_exponencial se desproporciona muy rápido, y parece que no hay absolutamente ninguna diferencia en la secuencia_lineal, ya que es minúscula en relación con la tendencia exponencial de la otra secuencia.

Ahora, tracemos la secuencia_exponencial en una escala logarítmica, lo que producirá una línea recta visual, ya que la escala Y aumentará exponencialmente. Si lo trazamos en una escala logarítmica, y la secuencia_lineal simplemente aumenta en la misma constante, tendremos dos líneas superpuestas y solo podremos ver la trazada después de la primera.

Cambiemos un poco la secuencia_lineal para que sea observable una vez que graficamos ambos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import matplotlib.pyplot as plt
import numpy as np

# Sequences
linear_sequence = [1, 2, 3, 4, 5, 6, 7, 10, 15, 20]
exponential_sequence = np.exp(np.linspace(0, 10, 10))

fig, ax = plt.subplots()

# Plot linear sequence, and set tick labels to the same color
ax.plot(linear_sequence, color='red')
ax.tick_params(axis='y', labelcolor='red')

# Generate a new Axes instance, on the twin-X axes (same position)
ax2 = ax.twinx()

# Plot exponential sequence, set scale to logarithmic and change tick color
ax2.plot(exponential_sequence, color='green')
ax2.set_yscale('log')
ax2.tick_params(axis='y', labelcolor='green')

plt.show()

Esta vez, tendremos que usar la interfaz OOP, ya que estamos creando una nueva instancia Axes. Un ‘Eje’ tiene una escala, por lo que creamos uno nuevo, en la misma posición que el primero, y establecemos su escala en una logarítmica, y trazamos la secuencia exponencial.

Esto resulta en:

También hemos cambiado los colores de la etiqueta de marca para que coincidan con el color de los diagramas de líneas, de lo contrario, sería difícil distinguir qué línea está en qué escala.

Trazar parcelas de varias líneas con varios ejes Y {#trazar varias parcelas de líneas con varios ejes}

Finalmente, podemos aplicar la misma escala (lineal, logarítmica, etc.), pero tener diferentes valores en el eje Y de cada gráfico de líneas. Esto se logra al tener múltiples ejes Y, en diferentes objetos Axes, en la misma posición.

Por ejemplo, la secuencia_lineal no superará los 20 en el eje Y, mientras que la secuencia_exponencial subirá a 20000. Podemos representarlos linealmente, simplemente representándolos en diferentes objetos Ejes , en la misma posición, cada uno de los cuales establece las marcas del eje Y automáticamente para adaptarse a los datos que estamos ingresando:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import matplotlib.pyplot as plt
import numpy as np

# Sequences
linear_sequence = [1, 2, 3, 4, 5, 6, 7, 10, 15, 20]
exponential_sequence = np.exp(np.linspace(0, 10, 10))

fig, ax = plt.subplots()

# Plot linear sequence, and set tick labels to the same color
ax.plot(linear_sequence, color='red')
ax.tick_params(axis='y', labelcolor='red')

# Generate a new Axes instance, on the twin-X axes (same position)
ax2 = ax.twinx()

# Plot exponential sequence, set scale to logarithmic and change tick color
ax2.plot(exponential_sequence, color='green')
ax2.tick_params(axis='y', labelcolor='green')

plt.show()

Nuevamente, hemos creado otros ‘Ejes’ en la misma posición que el primero, por lo que podemos trazar en el mismo lugar en la ‘Figura’ pero diferentes objetos ‘Ejes’, lo que nos permite establecer valores para cada Y- eje individualmente.

Sin establecer la escala Y en logarítmica esta vez, ambos se trazarán linealmente:

Conclusión

En este tutorial, hemos repasado cómo trazar múltiples gráficos de líneas en la misma “Figura” o “Ejes” en Matplotlib y Python. Hemos cubierto cómo trazar en los mismos ‘Ejes’ con la misma escala y eje Y, así como también cómo trazar en la misma ‘Figura’ con escalas de eje Y diferentes e idénticas.

Si está interesado en Visualización de datos y no sabe por dónde empezar, asegúrese de consultar nuestro paquete de libros en [Visualización de datos en Python](https://gum.co/data-visualization -en-paquete-de-libros-de-python):

Visualización de datos en Python Vuélvase peligroso con la visualización de datos ✅ Garantía de devolución de dinero de 30 días sin preguntas ✅ Principiante a Avanzado ✅ Actualizado periódicamente de forma gratuita (última actualización en abril de 2021) ✅ Actualizado con recursos y guías adicionales

Visualización de datos en Python con Matplotlib y Pandas es un libro diseñado para llevar a los principiantes absolutos a Pandas y Matplotlib, con conocimientos básicos de Python, y permitirles construir una base sólida para el trabajo avanzado con estas bibliotecas, desde gráficos simples. a gráficos 3D animados con botones interactivos.

Sirve como una guía detallada que le enseñará todo lo que necesita saber sobre Pandas y Matplotlib, incluido cómo construir tipos de gráficos que no están integrados en la propia biblioteca.

Visualización de datos en Python, un libro para desarrolladores principiantes e intermedios de Python, lo guía a través de la manipulación de datos simple con Pandas, cubre bibliotecas de trazado centrales como Matplotlib y Seaborn, y le muestra cómo aprovechar las bibliotecas declarativas y experimentales. como Altair. Más específicamente, a lo largo de 11 capítulos, este libro cubre 9 bibliotecas de Python: Pandas, Matplotlib, Seaborn, Bokeh, Altair, Plotly, GGPlot, GeoPandas y VisPy.

Sirve como una guía práctica única para la visualización de datos, en una plétora de herramientas que podría usar en su carrera.