📈 Matplotlib: La Herramienta de Visualización para Ingenieros #
Una vez que has procesado y calculado tus datos con bibliotecas como NumPy, necesitas una forma clara y efectiva de presentarlos. Aquí es donde entra Matplotlib, la biblioteca de visualización de datos más popular de Python. Piensa en ella como tu laboratorio de gráficos, donde puedes tomar tus datos crudos y convertirlos en gráficas informativas y de alta calidad.
1. Gráfico Básico: Tu Primera Curva de Datos #
El módulo principal de Matplotlib es matplotlib.pyplot, que se importa convencionalmente como plt. Con él, puedes crear una figura y un conjunto de ejes para trazar tus datos. La función más elemental es plt.plot(), que conecta puntos de datos con líneas.
import matplotlib.pyplot as plt
import numpy as np
# Datos de un ensayo de tracción simulado
deformacion = np.linspace(0, 0.1, 10) # Deformación (eje x)
esfuerzo = 210 * deformacion # Esfuerzo (eje y), usando la Ley de Hooke
# Crear la gráfica
plt.plot(deformacion, esfuerzo)
plt.show() # Muestra la gráfica en una ventana
El comando plt.show() es crucial, ya que “dibuja” la gráfica y la muestra en una ventana emergente.
2. Personalizando tu Gráfica: Etiquetado y Estilo #
Una gráfica sin etiquetas es como un plano sin dimensiones. Para que tu visualización sea útil y comprensible, debes añadirle información.
- Títulos y Etiquetas de Ejes: Usa
plt.title(),plt.xlabel(), yplt.ylabel()para describir tu gráfica y sus ejes. - Leyendas: Si trazas múltiples líneas, usa
plt.legend()para identificarlas. - Rejillas:
plt.grid()añade una rejilla para facilitar la lectura de los valores. - Colores y Estilos de Línea: Puedes modificar el aspecto de la línea directamente en la función
plt.plot().
Estilo de la Línea, Marcadores y Colores #
Matplotlib ofrece una gran flexibilidad para personalizar la apariencia de tus gráficas.
- Tipos de Línea: Controla cómo se dibuja la línea (sólida, punteada, etc.). Puedes usar un atajo de una o dos letras como en el ejemplo
b-(línea azul sólida) o el argumentolinestyle. - Marcadores: Son los símbolos que representan los puntos de datos. Se especifican con un carácter como
'o'(círculo) o's'(cuadrado). - Colores: Puedes usar nombres de colores (ej.
'red'), códigos hexadecimales (ej.'#ff9900'), o un atajo de una letra (ej.'b'para azul).
# Sintaxis de atajo: 'color-linestyle-marker'
plt.plot(x, y, 'r--o') # Línea roja, punteada, con marcadores de círculo
# Sintaxis de argumentos con palabras clave:
plt.plot(x, y, color='blue', linestyle=':', marker='s', label='Mi línea')
Aquí tienes una mini tabla para que puedas ver los distintos tipos de líneas, marcadores y abreviaturas de colores:
| Tipos de Líneas | Carácter | Marcadores | Carácter | Colores | Abreviación | ||
|---|---|---|---|---|---|---|---|
| Línea sólida | - |
Punto | . |
Azul | b |
||
| Línea discontinua | -- |
Círculo | o |
Verde | g |
||
| Guiones y puntos | -. |
Triángulo hacia abajo | v |
Rojo | r |
||
| Línea punteada | : |
Cuadrado | s |
Cian | c |
||
| Sin línea | '' |
Más (+) |
+ |
Magenta | m |
||
Equis (x) |
x |
Amarillo | y |
||||
| Diamante | d |
Negro | k |
Manejo de Leyendas y Posición #
La función plt.legend() es crucial para identificar cada serie de datos en tu gráfico. Para que funcione, debes asignar una etiqueta a cada línea utilizando el argumento label en la función plt.plot().
El lugar donde se muestra la leyenda se puede controlar con el argumento loc. Matplotlib intentará automáticamente encontrar el mejor lugar para la leyenda para no superponerse con las líneas, pero a veces es necesario especificar una posición.
Posición (loc) |
Descripción |
|---|---|
'best' |
(Por defecto) Encuentra la mejor ubicación para no superponerse con los datos. |
'upper right' |
Esquina superior derecha. |
'upper left' |
Esquina superior izquierda. |
'lower left' |
Esquina inferior izquierda. |
'lower right' |
Esquina inferior derecha. |
'center' |
Centrada en el gráfico. |
Ejemplo de Leyenda y Posición:
import matplotlib.pyplot as plt
import numpy as np
# Datos simulados de dos ensayos de materiales
deformacion = np.linspace(0, 0.01, 100)
esfuerzo_acero = 210 * 1e3 * deformacion # Acero de bajo carbono
esfuerzo_aluminio = 70 * 1e3 * deformacion # Aluminio
# Graficar ambas líneas con sus etiquetas
plt.plot(deformacion, esfuerzo_acero, label='Acero')
plt.plot(deformacion, esfuerzo_aluminio, label='Aluminio')
plt.title("Curvas de Esfuerzo-Deformación")
plt.xlabel("Deformación (m/m)")
plt.ylabel("Esfuerzo (MPa)")
# Añadir la leyenda en la esquina superior izquierda
plt.legend(loc='upper left')
plt.grid(True)
plt.show()
3. Tipos de Gráficas Comunes #
Matplotlib no se limita a las líneas. Te permite crear una variedad de tipos de gráficas, cada una ideal para un propósito diferente en la ingeniería.
- Gráfico de Dispersión (
plt.scatter): Muestra la relación entre dos variables sin conectarlas. Útil para identificar patrones o la dispersión de datos de un experimento. - Gráfico de Barras (
plt.bar): Compara valores entre diferentes categorías. Ideal para visualizar el consumo de energía de varios componentes o la fuerza en diferentes puntos. - Histograma (
plt.hist): Muestra la distribución de un conjunto de datos. Útil para análisis estadísticos de tolerancias o mediciones de calidad.
Ejemplos de Tipos de Gráficos #
Gráfico de Dispersión (Scatter Plot) #
Este tipo de gráfico es ideal para ver la relación entre dos conjuntos de datos, como en un experimento. Por ejemplo, la relación entre la temperatura y la eficiencia.
import matplotlib.pyplot as plt
import numpy as np
# Datos simulados de un experimento de laboratorio
presion_Pa = np.random.rand(50) * 100
temperatura_C = np.random.rand(50) * 200 + 50
eficiencia = np.random.rand(50) * 100
plt.scatter(presion_Pa, temperatura_C, c=eficiencia, cmap='viridis', s=100)
plt.colorbar(label='Eficiencia (%)')
plt.title("Relación entre Presión y Temperatura en un Sistema")
plt.xlabel("Presión (Pa)")
plt.ylabel("Temperatura (°C)")
plt.grid(True)
plt.show()
Gráfico de Barras (Bar Chart) #
Es perfecto para comparar cantidades entre diferentes categorías discretas. Por ejemplo, el peso de distintos componentes en un ensamblaje o el consumo de energía de diferentes equipos.
import matplotlib.pyplot as plt
import numpy as np
# Datos de peso de diferentes componentes de una máquina
componentes = ['Eje', 'Engranaje', 'Cojinete', 'Motor', 'Carcasa']
pesos_kg = [2.5, 1.8, 0.7, 5.2, 3.1]
plt.bar(componentes, pesos_kg)
plt.title("Peso de Componentes Mecánicos")
plt.xlabel("Componente")
plt.ylabel("Peso (kg)")
plt.show()
Histograma (Histogram) #
Utiliza un histograma para visualizar la distribución de un conjunto de datos. En ingeniería, es muy útil para analizar la distribución de tolerancias en piezas fabricadas o la frecuencia de ciertos valores en mediciones.
import matplotlib.pyplot as plt
import numpy as np
# Simulación de mediciones de diámetro de 1000 pernos
diametros_mm = np.random.normal(loc=10.0, scale=0.1, size=1000)
plt.hist(diametros_mm, bins=20, edgecolor='black', alpha=0.7)
plt.title("Distribución de Diámetros de Pernos")
plt.xlabel("Diámetro (mm)")
plt.ylabel("Frecuencia")
plt.grid(True)
plt.show()
4. Estilos de Gráficos Predeterminados #
Matplotlib incluye una serie de estilos predefinidos para cambiar la apariencia de tus gráficas de forma rápida y sencilla. Esto es ideal para darle un toque profesional y consistente a todos tus gráficos sin tener que modificar cada elemento individualmente.
Para aplicar un estilo, simplemente usa plt.style.use(). Puedes ver todos los estilos disponibles con plt.style.available.
| Estilo de Gráfico | Descripción |
|---|---|
default |
El estilo clásico y por defecto de Matplotlib. |
ggplot |
Inspirado en la popular librería de R. Ofrece un fondo gris y cuadrícula blanca. |
seaborn-whitegrid |
Un estilo minimalista con fondo blanco y rejilla horizontal. |
bmh |
(Bayesian Methods for Hackers) Un estilo limpio con fondo claro y líneas más finas. |
fivethirtyeight |
Basado en los gráficos del popular sitio de análisis de datos. |
Ejemplo de uso de estilo:
import matplotlib.pyplot as plt
import numpy as np
# Aplicar el estilo 'ggplot'
plt.style.use('ggplot')
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title("Gráfico con estilo ggplot")
plt.show()
5. Ajustando el Tamaño y Aspecto del Gráfico #
El tamaño y la proporción de una figura son cruciales para que tu gráfico se vea bien y sea fácil de leer. Matplotlib te permite controlar esto de dos maneras principales:
figsize: Un argumento en la funciónplt.figure()que acepta una tupla(ancho, alto)en pulgadas.dpi: Los puntos por pulgada (dots per inch) te permiten controlar la resolución de la imagen generada. Un mayordpigenera una imagen de mayor calidad, ideal para impresiones.
# Crear una figura de 8 pulgadas de ancho por 6 pulgadas de alto
plt.figure(figsize=(8, 6), dpi=100)
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title("Gráfico con tamaño personalizado")
plt.xlabel("X")
plt.ylabel("sin(x)")
plt.show()
Además, con plt.axis() puedes ajustar los límites de los ejes X e Y para enfocarte en una parte específica del gráfico. Por ejemplo, plt.axis([xmin, xmax, ymin, ymax]).
6. Subgráficas: Más de un Gráfico en una Figura #
A menudo, necesitas mostrar varias gráficas juntas para compararlas. Con subgráficas, puedes organizar múltiples ejes dentro de una misma figura. La función plt.subplot() te permite crear una cuadrícula de gráficas.
# Ejemplo: Visualizar fuerza y desplazamiento en gráficas separadas
fuerza_N = np.array([10, 20, 30, 40])
desplazamiento_m = np.array([0.01, 0.02, 0.03, 0.04])
# Subgráfica 1: Fuerza vs. Desplazamiento
plt.subplot(1, 2, 1) # 1 fila, 2 columnas, posición 1
plt.plot(desplazamiento_m, fuerza_N)
plt.title('Fuerza vs. Desplazamiento')
# Subgráfica 2: Fuerza vs. Fuerza
plt.subplot(1, 2, 2) # 1 fila, 2 columnas, posición 2
plt.plot(fuerza_N, fuerza_N, 'r--')
plt.title('Identidad')
plt.tight_layout() # Ajusta automáticamente los espacios entre las subgráficas
plt.show()
Dominar Matplotlib te permitirá comunicar tus hallazgos de forma clara y profesional. Es una habilidad indispensable para cualquier ingeniero que trabaje con datos de experimentos, simulaciones o análisis numéricos.
Ejercicios Prácticos de Matplotlib: ¡Ponte a prueba! #
Pon a prueba tus habilidades de visualización de datos con estos ejercicios. Intenta resolverlos por tu cuenta y, si te sientes atascado, revisa la cápsula de Matplotlib para guiarte.
Nivel 1: Gráficos Básicos y Personalización #
- Crea un gráfico de línea que muestre la relación entre el tiempo y la posición de un objeto en caída libre. Usa
np.linspace()para el tiempo y la fórmula de posición: $p = 0.5 \cdot 9.81 \cdot t^2$. Etiqueta los ejes como “Tiempo (s)” y “Posición (m)”.Haz clic para ver la solución
import matplotlib.pyplot as plt import numpy as np tiempo = np.linspace(0, 10, 100) posicion = 0.5 * 9.81 * tiempo**2 plt.plot(tiempo, posicion) plt.xlabel("Tiempo (s)") plt.ylabel("Posición (m)") plt.title("Relación entre Tiempo y Posición en Caída Libre") plt.show() - Grafica la función $y = x^3 - 4x^2 + 2x - 5$ en el rango de $x$ de -5 a 5. Dale al gráfico un título y una etiqueta para los ejes.
- Toma el gráfico del ejercicio 1 y agrega una segunda línea que represente la velocidad del objeto ($v = 9.81 \cdot t$). Usa un color, estilo de línea y marcador diferentes para la segunda línea. Añade una leyenda para ambas líneas.
- Crea un gráfico de línea con datos de temperatura diaria. Usa
plt.plot()con un marcador'o'para mostrar los puntos de datos y una línea sólida que los conecte. - Grafica los datos de la potencia de un motor (
[50, 60, 55, 70, 65]) a lo largo de 5 puntos de tiempo. Usa el estilo de línea'--'y un color verde. Agrega una rejilla al gráfico.
Nivel 2: Tipos de Gráficos y Estilos #
- Crea un gráfico de barras que muestre el consumo de energía (kWh) de 4 componentes de una máquina: ‘Motor’, ‘Bomba’, ‘Sensor’, ‘Actuador’. Asigna valores aleatorios para el consumo.
Haz clic para ver la solución
import matplotlib.pyplot as plt import numpy as np componentes = ['Motor', 'Bomba', 'Sensor', 'Actuador'] consumo_kWh = np.random.rand(4) * 100 plt.bar(componentes, consumo_kWh) plt.title("Consumo de Energía de Componentes de una Máquina") plt.xlabel("Componente") plt.ylabel("Consumo (kWh)") plt.show() - Crea un histograma para un conjunto de 1000 mediciones de diámetro de una pieza, simuladas con una distribución normal (usa
np.random.normal()). - Genera un gráfico de dispersión para 50 puntos de datos que muestren la relación entre la carga (
np.random.rand(50) * 100) y la deflexión (np.random.rand(50) * 0.5). - Aplica el estilo
'ggplot'a una gráfica de línea que muestre la presión en un tanque a lo largo del tiempo. - Dibuja un gráfico de barras utilizando el estilo
'fivethirtyeight'.
Nivel 3: Subgráficas y Formato Avanzado #
- Crea una figura con dos subgráficas, una al lado de la otra. En la primera, grafica la función seno y en la segunda, la función coseno.
Haz clic para ver la solución
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2*np.pi, 100) y_sin = np.sin(x) y_cos = np.cos(x) plt.figure(figsize=(12, 4)) plt.subplot(1, 2, 1) plt.plot(x, y_sin, label='Seno') plt.title('Función Seno') plt.legend() plt.subplot(1, 2, 2) plt.plot(x, y_cos, label='Coseno') plt.title('Función Coseno') plt.legend() plt.tight_layout() plt.show() - Crea una cuadrícula de 2x2 con cuatro subgráficas diferentes en una sola figura. Cada subgráfica debe tener un título único.
- Genera un gráfico de línea que muestre la aceleración de un vehículo. En una segunda subgráfica debajo de esta, traza la velocidad del vehículo. Asegúrate de que los ejes y títulos sean claros.
- Crea una gráfica de línea con
figsize=(10, 5). - Toma un gráfico de línea existente y ajusta sus límites de los ejes para que el gráfico se enfoque en una región específica, por ejemplo,
xlim=(2, 8)yylim=(0, 100).