Python: Cómo personalizar y utilizar de manera efectiva las barras de colores con Matplotlib

Matplotlib es una biblioteca ampliamente utilizada en Python para la visualización de datos. Dentro de ella, las barras de colores son un elemento importante para representar información numérica en forma de color en los gráficos. Sin embargo, la barra de colores predeterminada no siempre muestra de manera clara las características de los datos. Con una personalización adecuada, se puede mejorar el efecto visual y transmitir con mayor claridad la intención del gráfico. En este artículo, explicamos en detalle desde el uso básico de las barras de colores hasta las técnicas avanzadas de personalización, aprendiendo cómo lograr una visualización de datos efectiva.

Índice

Uso básico de la barra de colores


La barra de colores es una herramienta en Matplotlib que muestra la correspondencia entre los colores y los valores de los datos en un gráfico. Es especialmente importante cuando se desean visualizar rangos o distribuciones de datos en gráficos como mapas de calor o diagramas de dispersión. A continuación, se muestran los pasos básicos para agregar una barra de colores.

Cómo agregar una barra de colores


En Matplotlib, se puede agregar una barra de colores utilizando plt.colorbar(). A continuación se muestra un ejemplo sencillo de cómo agregar una barra de colores a un mapa de calor.

import matplotlib.pyplot as plt
import numpy as np

# Creación de datos de ejemplo
data = np.random.rand(10, 10)

# Dibujo del mapa de calor
plt.imshow(data, cmap='viridis')

# Agregar la barra de colores
plt.colorbar()

# Mostrar el gráfico
plt.show()

Al ejecutar este código, aparecerá una barra de colores a la derecha del mapa de calor, permitiendo ver cómo los colores representan los valores de los datos.

Rol básico de la barra de colores


La barra de colores ayuda en los siguientes aspectos para entender los datos:

  • Indicación del rango de los datos: La barra de colores muestra visualmente el rango de los valores de los datos, desde el mínimo hasta el máximo.
  • Correspondencia entre valores y colores: Dado que los valores de los datos se corresponden con un color específico, solo con mirar los colores podemos obtener una idea aproximada del valor.

La barra de colores predeterminada es simple, pero se puede ajustar su apariencia y escala según sea necesario, lo que permite transmitir los datos de manera más efectiva.

Cómo ajustar el mapa de colores y la escala de datos


Para maximizar el efecto visual de la barra de colores, es importante elegir un mapa de colores y una escala adecuados según la naturaleza de los datos. Matplotlib ofrece una variedad de mapas de colores y configuraciones de escala que se pueden usar eficazmente para resaltar las características de los datos.

Selección del mapa de colores


Un mapa de colores es un esquema de colores utilizado para convertir los datos numéricos en colores. Matplotlib ofrece varios mapas de colores que se pueden seleccionar según la aplicación. A continuación, algunos ejemplos de mapas de colores:

  • Datos continuos: viridis o plasma (con cambios consistentes en brillo y saturación)
  • Datos bidireccionales (que incluyen valores positivos y negativos): seismic o coolwarm
  • Datos categóricos: tab10 o Set3

A continuación, se muestra un ejemplo de cómo cambiar el mapa de colores:

import matplotlib.pyplot as plt
import numpy as np

# Creación de datos de ejemplo
data = np.random.rand(10, 10)

# Dibujo del mapa de calor (cambiando el mapa de colores a plasma)
plt.imshow(data, cmap='plasma')

# Agregar la barra de colores
plt.colorbar()

# Mostrar el gráfico
plt.show()

Ajuste de la escala de los datos


La barra de colores debe ajustarse adecuadamente a la escala de los datos. A continuación se muestran algunas formas de configurar la escala:

  • Limitar el rango: Se puede especificar un rango de datos claro utilizando vmin y vmax.
  • Resaltar un rango específico: Excluir valores extremos y enfocarse en el rango de interés.

A continuación, se muestra un ejemplo de cómo especificar vmin y vmax:

# Dibujo del mapa de calor (especificando el rango de datos)
plt.imshow(data, cmap='viridis', vmin=0.2, vmax=0.8)

# Agregar la barra de colores
plt.colorbar()

plt.show()

Selección del mapa de colores y escala según los datos

  • Cuando el rango de los datos es estrecho: Utilizar un mapa de colores brillante puede ser efectivo visualmente.
  • Datos científicos: Si existe un criterio para la selección del mapa de colores, debe respetarse.

Elegir un mapa de colores y una escala adecuados puede mejorar significativamente la claridad visual de todo el gráfico.

Personalización de la apariencia de la barra de colores


Al ajustar la apariencia de la barra de colores, se puede facilitar la interpretación de los datos y hacer que el gráfico tenga un aspecto más pulido. En Matplotlib, se puede personalizar el título, las etiquetas, la posición, el tamaño de la fuente y más.

Agregar un título a la barra de colores


Se puede agregar un título a la barra de colores para dejar claro lo que representa el color. Se usa colorbar.set_label() para ello.

import matplotlib.pyplot as plt
import numpy as np

# Creación de datos de ejemplo
data = np.random.rand(10, 10)

# Dibujo del mapa de calor
plt.imshow(data, cmap='viridis')

# Agregar la barra de colores
cbar = plt.colorbar()
cbar.set_label('Valor de los datos', fontsize=12)

plt.show()

Cambiar el tamaño de la fuente y el estilo de las etiquetas


Se puede modificar el tamaño y el estilo de las etiquetas de los valores (tics) de la barra de colores para ajustar el diseño. A continuación se muestra un ejemplo de cómo cambiar el tamaño de la fuente y el estilo:

cbar.ax.tick_params(labelsize=10, labelcolor='blue')

Ajustar la posición de la barra de colores


De forma predeterminada, la barra de colores se muestra en el lado derecho del gráfico, pero se puede ajustar su posición y tamaño especificando shrink o aspect.

plt.colorbar(shrink=0.8, aspect=20)
  • shrink: Reduce la longitud de la barra de colores (especificada entre 0 y 1).
  • aspect: Ajusta la relación de aspecto de la barra de colores.

Configurar explícitamente el rango de colores y las etiquetas de los tics


Para facilitar la comprensión de los datos, se pueden configurar manualmente las etiquetas de los tics de la barra de colores. Se utiliza colorbar.set_ticks() para ello.

import matplotlib.ticker as ticker

cbar.set_ticks([0.2, 0.5, 0.8])
cbar.set_ticklabels(['Bajo', 'Medio', 'Alto'])

Aplicar diseños complejos


Si se desea realizar más personalizaciones, es posible acceder directamente a las áreas de dibujo de la barra de colores.

cbar.ax.set_title('Leyenda de Color', fontsize=10, loc='left')

Selección de la apariencia adecuada

  • Elija el diseño según el tema del gráfico y la perspectiva del espectador.
  • Para documentos científicos, opte por un diseño simple y fácil de leer; para presentaciones, elija un diseño que llame la atención.

Mejorar el diseño de la barra de colores puede aumentar significativamente la efectividad de la visualización de datos.

Creación de una barra de colores discreta


Una barra de colores discreta se utiliza cuando se desea representar categorías o clases discretas en lugar de datos continuos. Es útil para mostrar claramente las características de los datos categóricos, jugando un papel importante en el análisis de datos y presentaciones.

Necesidad de una barra de colores discreta

  • Visualización de datos categóricos: Utilizada en datos geográficos, resultados de clasificación o datos divididos en rangos específicos.
  • Distinción clara de colores: Permite distinguir visualmente entre diferentes categorías de manera sencilla.

Cómo crear una barra de colores discreta


Matplotlib permite discretizar el mapa de colores utilizando BoundaryNorm.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import BoundaryNorm
from matplotlib.cm import get_cmap

# Creación de datos de ejemplo
data = np.random.rand(10, 10) * 100

# Configuración de la barra de colores
bounds = [0, 20, 40, 60, 80, 100]  # Valores de división
cmap = get_cmap('viridis', len(bounds) - 1)  # Mapa de colores adaptado al número de categorías
norm = BoundaryNorm(bounds, cmap.N)

# Dibujo del mapa de calor
plt.imshow(data, cmap=cmap, norm=norm)

# Agregar la barra de colores
cbar = plt.colorbar(ticks=bounds)  # Utilizando los valores de división como tics
cbar.set_label('Categoría')

plt.show()

Este código mapea los valores de los datos a los rangos especificados (0-20, 20-40, etc.), mostrando colores distintos para cada rango.

Personalización de las etiquetas de la barra de colores


Se pueden personalizar las etiquetas correspondientes a los datos categóricos para aclarar lo que representa la barra de colores.

cbar.set_ticklabels(['Muy Bajo', 'Bajo', 'Medio', 'Alto', 'Muy Alto'])

Mapa de colores personalizado para categorías


Si se desea especificar colores particulares, se puede crear un mapa de colores manualmente utilizando ListedColormap:

from matplotlib.colors import ListedColormap

colors = ['blue', 'green', 'yellow', 'orange', 'red']
cmap = ListedColormap(colors)
norm = BoundaryNorm(bounds, len(colors))

plt.imshow(data, cmap=cmap, norm=norm)
plt.colorbar(ticks=bounds)
plt.show()

Escenarios para el uso de barras de colores discretas

  • Clasificación de áreas en mapas (por ejemplo: densidad poblacional, zonas climáticas).
  • Visualización de resultados de clasificación de modelos de aprendizaje automático (por ejemplo: etiquetas de clases).
  • Dividir resultados de puntuación por rangos de colores para mostrar intuiciones.

Las barras de colores discretas ayudan en la categorización de datos y en la organización visual, siendo herramientas poderosas en presentaciones y análisis.

Creación de una barra de colores con escala logarítmica


Cuando los datos tienen una amplia distribución, usar una barra de colores con escala logarítmica facilita la visualización de valores extremos o pequeños. Esto es especialmente útil en datos científicos o financieros, donde los números cambian exponencialmente.

Necesidad de una escala logarítmica

  • Cuando se manejan rangos amplios de datos: Cuando hay una gran diferencia entre los valores mínimos y máximos.
  • Para mantener el balance entre los detalles y el total: Para visualizar correctamente tanto los valores pequeños como los grandes.
  • Representación estándar en datos científicos: La escala logarítmica es común en datos que tienen un significado en este contexto (por ejemplo: magnitud de un terremoto, observaciones astronómicas).

Cómo crear una barra de colores con escala logarítmica


Matplotlib permite aplicar la escala logarítmica utilizando LogNorm.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LogNorm

# Creación de datos de ejemplo
data = np.random.rand(10, 10) * 1000
data[0, 0] = 0.01  # Se agrega un valor pequeño para verificar el efecto de la escala

# Dibujo del mapa de calor (aplicando escala logarítmica)
plt.imshow(data, cmap='viridis', norm=LogNorm(vmin=0.01, vmax=1000))

# Agregar la barra de colores
cbar = plt.colorbar()
cbar.set_label('Valor en escala logarítmica')

plt.show()

Este código genera una barra de colores basada en una escala logarítmica, mostrando adecuadamente el rango de valores de 0.01 a 1000.

Ajuste de la escala logarítmica para valores pequeños


Si los datos contienen valores cercanos a cero o negativos, la escala logarítmica generará un error. Para manejar esto, se pueden tomar las siguientes acciones:

  1. Configurar un valor mínimo: Reemplazar los valores cero por un valor positivo pequeño.
   data[data <= 0] = 0.01
  1. Personalizar el mapa de colores: Crear una escala propia para manejar valores negativos o cercanos a cero.

Ajuste de los tics de la barra de colores


Se puede configurar explícitamente los tics para hacer más claro el significado de los valores en la escala logarítmica:

from matplotlib.ticker import LogLocator

cbar = plt.colorbar()
cbar.set_ticks(LogLocator(base=10.0, subs=None, numticks=10))
cbar.set_label('Valor en escala logarítmica (tics personalizados)')

Ejemplo de uso: Aplicación de escala logarítmica

  • Mapa de calor: Para datos científicos (por ejemplo, intensidad de radiación, distribución de luminosidad) donde los pequeños cambios deben ser destacados.
  • Gráficos de dispersión: Para datos financieros (por ejemplo, fluctuaciones en precios de acciones) donde se visualizan tanto grandes como pequeños valores.
  • Datos geográficos: Para visualizar distribuciones de terremotos o densidad poblacional.

Consideraciones

  • Los datos que contienen valores cero o negativos no se pueden visualizar adecuadamente con una escala logarítmica, por lo que es necesario procesar los datos antes.
  • Es importante asegurarse de que la escala logarítmica sea adecuada para la visualización de los datos.

Usar una barra de colores con escala logarítmica de manera efectiva puede mejorar la precisión de la visualización de los datos y transmitir mejor sus características.

Cómo compartir la barra de colores entre varios gráficos


Cuando se crean varios gráficos, agregar una barra de colores individual a cada uno puede hacer que la visualización se vea desordenada. Si todos los gráficos comparten el mismo rango de datos, se puede compartir una barra de colores para mantener la unidad visual y aprovechar mejor el espacio.

Escenarios en los que compartir la barra de colores es útil

  • Gráficos comparativos: Cuando se desea comparar la visualización de diferentes conjuntos de datos o condiciones.
  • Gráficos con el mismo rango de datos: Cuando todos los gráficos están mapeados con el mismo rango de valores.
  • Optimización del espacio: Eliminar barras de colores redundantes para simplificar la disposición del gráfico.

Cómo compartir la barra de colores


En Matplotlib, se puede compartir una sola barra de colores utilizando fig.colorbar(). Aquí hay un ejemplo de implementación:

import matplotlib.pyplot as plt
import numpy as np

# Creación de datos de ejemplo
data1 = np.random.rand(10, 10) * 100
data2 = np.random.rand(10, 10) * 100

# Creación de la Figura y los Ejes
fig, axs = plt.subplots(1, 2, figsize=(10, 5))

# Dibujo de los mapas de calor
im1 = axs[0].imshow(data1, cmap='viridis', vmin=0, vmax=100)
im2 = axs[1].imshow(data2, cmap='viridis', vmin=0, vmax=100)

# Compartir la barra de colores
cbar = fig.colorbar(im1, ax=axs, orientation='vertical')
cbar.set_label('Barra de colores compartida')

plt.show()

Este código muestra cómo ambos gráficos comparten la misma escala de valores utilizando vmin y vmax, y la barra de colores está asociada con ambos gráficos.

Ajuste de la posición y orientación de la barra de colores


Se puede ajustar la orientación y posición de la barra de colores para optimizar la disposición de los gráficos. Por ejemplo, para colocar la barra de colores de forma horizontal en la parte inferior:

cbar = fig.colorbar(im1, ax=axs, orientation='horizontal', fraction=0.046, pad=0.1)
  • orientation: Se puede especificar la orientación como 'horizontal' o 'vertical'.
  • fraction: Ajusta el ancho de la barra de colores.
  • pad: Ajusta el espacio entre la barra de colores y los gráficos.

Ajustes al compartir la barra de colores entre gráficos

  • Unificar la escala: Asegúrese de que vmin y vmax sean los mismos en todos los gráficos.
  • Consistencia visual: Verifique que el mapa de colores se ajuste a las características de los datos.
  • Ajustar los tics: Configure los tics de la barra de colores para que los valores sean intuitivos y fáciles de interpretar.

Ejemplos de uso

  • Mapas de calor: Cuando se muestren muchas etiquetas, la barra de colores puede colocarse en la parte inferior para ahorrar espacio.
  • Datos geográficos: Colocar la barra de colores en el exterior para mostrar el mapa completo.
  • Datos científicos: Para gráficos alargados, se puede colocar la barra de colores horizontalmente en la parte inferior.

Mejores prácticas para la disposición de la barra de colores

  • Elija la ubicación de la barra de colores según la visibilidad del gráfico.
  • Asegúrese de que las etiquetas y las unidades estén correctamente mostradas en la barra de colores.
  • La disposición debe facilitar la comprensión intuitiva de los datos y la barra de colores.

Ajustar adecuadamente la ubicación de la barra de colores mejora el impacto visual y la capacidad de transmitir los datos del gráfico.

Conclusión


En este artículo hemos explicado cómo personalizar la barra de colores utilizando Matplotlib en Python. Comenzamos con el uso básico y cubrimos la selección del mapa de colores, ajustes de escala, personalización de la apariencia, y la creación de barras de colores discretas y con escala logarítmica. También se discutieron técnicas prácticas para compartir la barra de colores entre varios gráficos y ajustar su posición.

La barra de colores no es solo un elemento auxiliar en la visualización de datos; es una herramienta fundamental para transmitir visualmente las características de los datos. Dependiendo de cómo se personalice, puede crear gráficos mucho más claros y persuasivos.

Índice