Imagen destacada del tutorial: Gráficos Básicos con Matplotlib: Tipos de Gráficos Esenciales
Matplotlib

Gráficos Básicos con Matplotlib: Tipos de Gráficos Esenciales

José Elías Romero Guanipa
01 Sep 2025

Aprende a crear los tipos de gráficos más comunes con Matplotlib: líneas, dispersión, barras, áreas y más con ejemplos prácticos.

matplotlib python visualizacion graficos lineas +2 más

¡Domina los tipos de gráficos más utilizados en Matplotlib! En este tutorial aprenderás a crear gráficos de líneas, dispersión, barras, áreas y otros tipos básicos que son fundamentales para la visualización de datos.

Objetivo: Aprender a crear y personalizar los tipos de gráficos más comunes en Matplotlib con ejemplos prácticos y casos de uso reales.

Índice

Gráficos de Líneas

Los gráficos de líneas son ideales para mostrar tendencias a lo largo del tiempo o relaciones continuas entre variables.

Gráfico de Línea Básico

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.linspace(0, 10, 100)
y = np.sin(x)

# Crear gráfico
plt.figure(figsize=(10, 6))
plt.plot(x, y)

# Personalización básica
plt.xlabel('Tiempo')
plt.ylabel('Amplitud')
plt.title('Función Seno')
plt.grid(True, alpha=0.3)

plt.show()

Múltiples Líneas

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x + np.pi/4)

# Crear gráfico con múltiples líneas
plt.figure(figsize=(12, 8))

plt.plot(x, y1, 'b-', label='sin(x)', linewidth=2)
plt.plot(x, y2, 'r--', label='cos(x)', linewidth=2)
plt.plot(x, y3, 'g:', label='sin(x + π/4)', linewidth=2)

# Personalización
plt.xlabel('x', fontsize=12)
plt.ylabel('y', fontsize=12)
plt.title('Funciones Trigonométricas', fontsize=14, fontweight='bold')
plt.legend(fontsize=12)
plt.grid(True, alpha=0.3)

# Agregar líneas de referencia
plt.axhline(y=0, color='k', linestyle='-', alpha=0.3)
plt.axvline(x=np.pi, color='k', linestyle='-', alpha=0.3)

plt.show()

Estilos de Línea

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 50)

# Diferentes estilos de línea
estilos = ['-', '--', '-.', ':', 'solid', 'dashed', 'dashdot', 'dotted']

plt.figure(figsize=(12, 8))

for i, estilo in enumerate(estilos):
    y = np.sin(x + i * 0.5)
    plt.plot(x, y, estilo, label=f'Estilo: {estilo}', linewidth=2)

plt.xlabel('x')
plt.ylabel('sin(x + offset)')
plt.title('Estilos de Línea en Matplotlib')
plt.legend()
plt.grid(True, alpha=0.3)

plt.show()

Múltiples líneas en Matplotlib Fig. 1: Ejemplo de múltiples líneas con diferentes estilos y colores

Gráficos de Dispersión

Los gráficos de dispersión muestran la relación entre dos variables numéricas, ideales para identificar correlaciones y patrones.

Gráfico de Dispersión Básico

import matplotlib.pyplot as plt
import numpy as np

# Generar datos aleatorios
np.random.seed(42)
x = np.random.randn(100)
y = 2 * x + np.random.randn(100) * 0.5

# Crear gráfico de dispersión
plt.figure(figsize=(10, 6))
plt.scatter(x, y, alpha=0.6, s=50)

plt.xlabel('Variable X')
plt.ylabel('Variable Y')
plt.title('Gráfico de Dispersión Básico')
plt.grid(True, alpha=0.3)

plt.show()

Personalización Avanzada

import matplotlib.pyplot as plt
import numpy as np

# Generar datos más complejos
np.random.seed(42)
n = 200
x = np.random.randn(n)
y = x * 2 + np.random.randn(n)
colors = np.random.rand(n)  # Colores aleatorios
sizes = 100 * np.random.rand(n)  # Tamaños aleatorios

# Crear gráfico con personalización
plt.figure(figsize=(12, 8))

scatter = plt.scatter(x, y, c=colors, s=sizes, alpha=0.6,
                     cmap='viridis', edgecolors='black', linewidth=0.5)

# Agregar barra de colores
plt.colorbar(scatter, label='Intensidad')

plt.xlabel('Variable X', fontsize=12)
plt.ylabel('Variable Y', fontsize=12)
plt.title('Gráfico de Dispersión con Personalización', fontsize=14, fontweight='bold')
plt.grid(True, alpha=0.3)

plt.show()

Múltiples Conjuntos de Datos

import matplotlib.pyplot as plt
import numpy as np

# Generar tres conjuntos de datos
np.random.seed(42)
n = 50

# Grupo 1
x1 = np.random.normal(0, 1, n)
y1 = np.random.normal(0, 1, n)

# Grupo 2
x2 = np.random.normal(3, 1, n)
y2 = np.random.normal(3, 1, n)

# Grupo 3
x3 = np.random.normal(0, 1, n)
y3 = np.random.normal(3, 1, n)

# Crear gráfico
plt.figure(figsize=(10, 8))

plt.scatter(x1, y1, c='red', label='Grupo 1', alpha=0.7, s=50)
plt.scatter(x2, y2, c='blue', label='Grupo 2', alpha=0.7, s=50)
plt.scatter(x3, y3, c='green', label='Grupo 3', alpha=0.7, s=50)

plt.xlabel('Variable X')
plt.ylabel('Variable Y')
plt.title('Múltiples Grupos en Gráfico de Dispersión')
plt.legend()
plt.grid(True, alpha=0.3)

plt.show()

Gráfico de dispersión con colores Fig. 2: Gráfico de dispersión con colores y tamaños variables

Gráficos de Barras

Los gráficos de barras son excelentes para comparar categorías o mostrar frecuencias.

Gráfico de Barras Vertical

import matplotlib.pyplot as plt

# Datos
categorias = ['Python', 'Java', 'JavaScript', 'C++', 'PHP']
usuarios = [85, 72, 68, 45, 38]

# Crear gráfico de barras
plt.figure(figsize=(10, 6))
bars = plt.bar(categorias, usuarios, color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd'])

# Personalización
plt.xlabel('Lenguajes de Programación')
plt.ylabel('Número de Usuarios (millones)')
plt.title('Popularidad de Lenguajes de Programación')
plt.grid(True, alpha=0.3, axis='y')

# Agregar valores encima de las barras
for bar, valor in zip(bars, usuarios):
    plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 1,
             f'{valor}M', ha='center', va='bottom', fontweight='bold')

plt.show()

Gráfico de Barras Horizontal

import matplotlib.pyplot as plt

# Datos
paises = ['China', 'India', 'Estados Unidos', 'Indonesia', 'Brasil']
poblacion = [1439, 1380, 331, 273, 213]

# Crear gráfico de barras horizontal
plt.figure(figsize=(10, 6))
bars = plt.barh(paises, poblacion, color='skyblue', edgecolor='navy', linewidth=1)

# Personalización
plt.xlabel('Población (millones)')
plt.ylabel('País')
plt.title('Población por País (2023)')
plt.grid(True, alpha=0.3, axis='x')

# Agregar valores al final de las barras
for bar, valor in zip(bars, poblacion):
    plt.text(bar.get_width() + 10, bar.get_y() + bar.get_height()/2,
             f'{valor}M', ha='left', va='center', fontweight='bold')

plt.show()

Barras Agrupadas

import matplotlib.pyplot as plt
import numpy as np

# Datos
categorias = ['Q1', 'Q2', 'Q3', 'Q4']
ventas_A = [120, 150, 180, 200]
ventas_B = [100, 130, 160, 190]

# Posiciones de las barras
x = np.arange(len(categorias))
ancho = 0.35

# Crear gráfico
plt.figure(figsize=(10, 6))

bars1 = plt.bar(x - ancho/2, ventas_A, ancho, label='Producto A',
                color='lightblue', edgecolor='blue', linewidth=1)
bars2 = plt.bar(x + ancho/2, ventas_B, ancho, label='Producto B',
                color='lightcoral', edgecolor='red', linewidth=1)

# Personalización
plt.xlabel('Trimestre')
plt.ylabel('Ventas ($)')
plt.title('Ventas por Trimestre - Comparación de Productos')
plt.xticks(x, categorias)
plt.legend()
plt.grid(True, alpha=0.3, axis='y')

# Agregar valores
for bars in [bars1, bars2]:
    for bar in bars:
        height = bar.get_height()
        plt.text(bar.get_x() + bar.get_width()/2, height + 5,
                 f'${height}', ha='center', va='bottom', fontweight='bold')

plt.show()

Barras agrupadas comparativas Fig. 3: Barras agrupadas para comparar múltiples series de datos

Gráficos de Área

Los gráficos de área muestran la evolución de una o más variables, rellenando el área bajo las líneas.

Gráfico de Área Básico

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.linspace(0, 10, 100)
y = np.sin(x) + 2

# Crear gráfico de área
plt.figure(figsize=(10, 6))
plt.fill_between(x, y, alpha=0.5, color='skyblue', label='Área bajo la curva')
plt.plot(x, y, color='blue', linewidth=2, label='Línea')

plt.xlabel('x')
plt.ylabel('y')
plt.title('Gráfico de Área Básico')
plt.legend()
plt.grid(True, alpha=0.3)

plt.show()

Áreas Apiladas

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.arange(1, 13)
ventas_online = [120, 150, 180, 200, 250, 300, 280, 320, 350, 380, 400, 420]
ventas_tienda = [200, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 420]

# Crear gráfico de áreas apiladas
plt.figure(figsize=(12, 8))

plt.fill_between(x, 0, ventas_online, alpha=0.7, color='lightblue',
                 label='Ventas Online', edgecolor='blue', linewidth=1)
plt.fill_between(x, ventas_online, ventas_online + ventas_tienda, alpha=0.7,
                 color='lightcoral', label='Ventas Tienda', edgecolor='red', linewidth=1)

# Línea total
total = np.array(ventas_online) + np.array(ventas_tienda)
plt.plot(x, total, 'k-', linewidth=2, label='Total')

plt.xlabel('Mes')
plt.ylabel('Ventas ($)')
plt.title('Ventas Online vs Tienda - Áreas Apiladas')
plt.xticks(x, ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun',
               'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'])
plt.legend()
plt.grid(True, alpha=0.3)

plt.show()

Área apilada con múltiples series Fig. 4: Gráfico de área apilada mostrando contribución de diferentes componentes

Gráficos de Escalera

Los gráficos de escalera muestran cambios discretos en los datos, útiles para series temporales con cambios abruptos.

import matplotlib.pyplot as plt
import numpy as np

# Datos de temperatura por hora
horas = np.arange(0, 25, 1)
temperatura = [15, 14, 13, 12, 11, 12, 15, 18, 22, 25, 28, 30, 32,
               33, 32, 30, 28, 25, 22, 20, 18, 17, 16, 15, 14]

# Crear gráfico de escalera
plt.figure(figsize=(12, 6))

# Gráfico de línea normal
plt.plot(horas, temperatura, 'b-', alpha=0.3, label='Línea continua')

# Gráfico de escalera
plt.step(horas, temperatura, 'r-', linewidth=2, where='post', label='Escalera')

plt.xlabel('Hora del día')
plt.ylabel('Temperatura (°C)')
plt.title('Temperatura a lo Largo del Día')
plt.xticks(np.arange(0, 25, 2))
plt.grid(True, alpha=0.3)
plt.legend()

plt.show()

Gráficos de Tallo

Los gráficos de tallo muestran la distribución de datos discretos, similares a histogramas pero más simples.

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.arange(0.1, 4, 0.1)
y = np.exp(-x)

# Crear gráfico de tallo
plt.figure(figsize=(10, 6))

markerline, stemlines, baseline = plt.stem(x, y, linefmt='b-', markerfmt='bo',
                                           basefmt='k-', label='Datos')

# Personalización
plt.setp(stemlines, linewidth=1.5)
plt.setp(markerline, markersize=6)

plt.xlabel('x')
plt.ylabel('exp(-x)')
plt.title('Gráfico de Tallo: Función Exponencial')
plt.grid(True, alpha=0.3)
plt.legend()

plt.show()

Combinando Múltiples Tipos

A menudo es útil combinar diferentes tipos de gráficos en una misma visualización.

import matplotlib.pyplot as plt
import numpy as np

# Datos
meses = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun']
ventas = [120, 150, 180, 200, 250, 300]
clientes = [45, 52, 48, 61, 55, 67]
satisfaccion = [4.2, 4.1, 4.3, 4.4, 4.5, 4.6]

# Crear figura con dos ejes Y
fig, ax1 = plt.subplots(figsize=(12, 8))

# Barras para ventas
bars = ax1.bar(meses, ventas, color='lightblue', alpha=0.7, label='Ventas ($)')
ax1.set_xlabel('Mes')
ax1.set_ylabel('Ventas ($)', color='blue')
ax1.tick_params(axis='y', labelcolor='blue')

# Segundo eje Y para clientes
ax2 = ax1.twinx()
line = ax2.plot(meses, clientes, 'r-o', linewidth=2, label='Clientes')
ax2.set_ylabel('Número de Clientes', color='red')
ax2.tick_params(axis='y', labelcolor='red')

# Gráfico de dispersión para satisfacción
ax3 = ax1.twinx()
ax3.spines['right'].set_position(('outward', 60))
scatter = ax3.scatter(meses, satisfaccion, c='green', s=100, label='Satisfacción', marker='s')
ax3.set_ylabel('Satisfacción (1-5)', color='green')
ax3.tick_params(axis='y', labelcolor='green')
ax3.set_ylim(3.5, 5)

# Título y leyendas
plt.title('Análisis de Ventas, Clientes y Satisfacción')
ax1.grid(True, alpha=0.3)

# Combinar leyendas
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
lines3, labels3 = ax3.get_legend_handles_labels()
ax1.legend(lines1 + lines2 + lines3, labels1 + labels2 + labels3, loc='upper left')

plt.show()

Casos de Uso Prácticos

1. Análisis de Tendencias de Ventas

import matplotlib.pyplot as plt
import numpy as np

# Simular datos de ventas mensuales
np.random.seed(42)
meses = np.arange(1, 13)
ventas_base = 1000 + 50 * meses
ruido = np.random.normal(0, 100, 12)
ventas = ventas_base + ruido

# Crear visualización completa
plt.figure(figsize=(15, 10))

# Gráfico principal
plt.subplot(2, 2, 1)
plt.plot(meses, ventas, 'b-o', linewidth=2, markersize=6)
plt.xlabel('Mes')
plt.ylabel('Ventas ($)')
plt.title('Tendencia de Ventas Mensuales')
plt.grid(True, alpha=0.3)

# Histograma de ventas
plt.subplot(2, 2, 2)
plt.hist(ventas, bins=6, edgecolor='black', alpha=0.7)
plt.xlabel('Rango de Ventas')
plt.ylabel('Frecuencia')
plt.title('Distribución de Ventas')
plt.grid(True, alpha=0.3)

# Gráfico de dispersión: mes vs ventas
plt.subplot(2, 2, 3)
plt.scatter(meses, ventas, s=100, alpha=0.6, c=ventas, cmap='viridis')
plt.xlabel('Mes')
plt.ylabel('Ventas ($)')
plt.title('Relación Mes-Ventas')
plt.colorbar(label='Ventas ($)')
plt.grid(True, alpha=0.3)

# Gráfico de barras comparativo
plt.subplot(2, 2, 4)
meses_str = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun',
             'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic']
plt.bar(meses_str, ventas, color='skyblue', edgecolor='navy')
plt.xlabel('Mes')
plt.ylabel('Ventas ($)')
plt.title('Ventas por Mes')
plt.xticks(rotation=45)
plt.grid(True, alpha=0.3, axis='y')

plt.tight_layout()
plt.show()

2. Visualización de Datos Científicos

import matplotlib.pyplot as plt
import numpy as np

# Simular datos de experimento científico
np.random.seed(42)
tiempo = np.linspace(0, 100, 1000)
senal = np.sin(0.1 * tiempo) + 0.5 * np.sin(0.5 * tiempo) + 0.1 * np.random.randn(1000)

# Crear visualización científica
plt.figure(figsize=(15, 10))

# Señal temporal
plt.subplot(2, 2, 1)
plt.plot(tiempo, senal, 'b-', linewidth=1, alpha=0.8)
plt.xlabel('Tiempo (s)')
plt.ylabel('Amplitud')
plt.title('Señal Temporal')
plt.grid(True, alpha=0.3)

# Histograma de la señal
plt.subplot(2, 2, 2)
plt.hist(senal, bins=50, edgecolor='black', alpha=0.7, density=True)
plt.xlabel('Amplitud')
plt.ylabel('Densidad de Probabilidad')
plt.title('Distribución de Amplitud')
plt.grid(True, alpha=0.3)

# Espectro de frecuencia (simplificado)
plt.subplot(2, 2, 3)
frecuencias = np.fft.fftfreq(len(tiempo), tiempo[1] - tiempo[0])
espectro = np.abs(np.fft.fft(senal))
plt.plot(frecuencias[:len(frecuencias)//2], espectro[:len(espectro)//2], 'r-')
plt.xlabel('Frecuencia (Hz)')
plt.ylabel('Magnitud')
plt.title('Espectro de Frecuencia')
plt.grid(True, alpha=0.3)

# Diagrama de dispersión con densidad
plt.subplot(2, 2, 4)
plt.scatter(tiempo[::10], senal[::10], alpha=0.6, s=20, c=senal[::10], cmap='coolwarm')
plt.xlabel('Tiempo (s)')
plt.ylabel('Amplitud')
plt.title('Diagrama de Dispersión con Densidad')
plt.colorbar(label='Amplitud')
plt.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

¡Has aprendido los tipos de gráficos básicos más importantes en Matplotlib! Ahora puedes crear visualizaciones efectivas para diferentes tipos de datos y casos de uso.

En el próximo tutorial aprenderás sobre Personalización de Gráficos para hacer tus visualizaciones aún más atractivas y profesionales.

Toca los botones para interactuar

Comentarios

Comentarios

Inicia sesión para dejar un comentario.

No hay comentarios aún

Sé el primero en comentar este tutorial.

Tutoriales Relacionados

Descubre más tutoriales relacionados que podrían ser de tu interés

Imagen destacada del tutorial relacionado: Gráficos 3D con Matplotlib: Visualización Tridimensional
Matplotlib

Gráficos 3D con Matplotlib: Visualización Tridimensional

Aprende a crear gráficos 3D impactantes con Matplotlib: superficies, dispersión 3D, líneas 3D, barras 3D y animaciones tridimensionales.

José Elías Romero Guanipa
01 Sep 2025
Imagen destacada del tutorial relacionado: Gráficos Avanzados con Matplotlib: Visualizaciones Estadísticas y Complejas
Matplotlib

Gráficos Avanzados con Matplotlib: Visualizaciones Estadísticas y Complejas

Aprende a crear gráficos avanzados con Matplotlib: histogramas, mapas de calor, diagramas de caja, gráficos polares y visualizaciones estadísticas complejas.

José Elías Romero Guanipa
01 Sep 2025
Imagen destacada del tutorial relacionado: Introducción a Matplotlib: Visualización de Datos en Python
Matplotlib

Introducción a Matplotlib: Visualización de Datos en Python

Aprende los fundamentos de Matplotlib, la biblioteca más popular para crear gráficos y visualizaciones en Python. Desde la instalación hasta tu primer gráfico.

José Elías Romero Guanipa
01 Sep 2025
Imagen destacada del tutorial relacionado: Personalización de Gráficos con Matplotlib: Colores, Estilos y Temas
Matplotlib

Personalización de Gráficos con Matplotlib: Colores, Estilos y Temas

Aprende a personalizar completamente tus gráficos con Matplotlib: colores, estilos, fuentes, leyendas, anotaciones y temas profesionales.

José Elías Romero Guanipa
01 Sep 2025
Imagen destacada del tutorial relacionado: Subplots y Múltiples Figuras con Matplotlib: Layouts Complejos
Matplotlib

Subplots y Múltiples Figuras con Matplotlib: Layouts Complejos

Aprende a crear layouts complejos con múltiples gráficos usando subplots, GridSpec y técnicas avanzadas de organización visual.

José Elías Romero Guanipa
01 Sep 2025
Foto de perfil del autor José Elías Romero Guanipa
José Elías Romero Guanipa
Autor

🌟 Nube de Etiquetas

Descubre temas populares en nuestros tutoriales

python
python 25 tutoriales
ciencia de datos
ciencia de datos 8 tutoriales
matplotlib
matplotlib 7 tutoriales
pandas
pandas 6 tutoriales
visualizacion
visualizacion 6 tutoriales
principiante
principiante 5 tutoriales
numpy
numpy 5 tutoriales
estadistica
estadistica 4 tutoriales
bases de datos
bases de datos 4 tutoriales
dataframe
dataframe 4 tutoriales
csv
csv 3 tutoriales
json
json 3 tutoriales
poo
poo 3 tutoriales
machine learning
machine learning 3 tutoriales
patrones diseño
patrones diseño 3 tutoriales
rendimiento
rendimiento 3 tutoriales
mysql
mysql 3 tutoriales
postgresql
postgresql 3 tutoriales
analisis de datos
analisis de datos 3 tutoriales
graficos
graficos 3 tutoriales
excepciones
excepciones 2 tutoriales
algoritmos
algoritmos 2 tutoriales
estructuras datos
estructuras datos 2 tutoriales
programación
programación 2 tutoriales
colaboracion
colaboracion 2 tutoriales

Las etiquetas más grandes y brillantes aparecen en más tutoriales

logo logo

©2024 ViveBTC