馃摎 Matplotlib Scatter: Ejemplos y Aplicaciones B谩sicas

Matplotlib Logo

Acorde贸n de los 脥ndices de Matplotlib Scatter




Lecci贸n: 10 - Matplotlib Scatter

Creating Scatter Plots

⚫ Los **gr谩ficos de dispersi贸n** (scatter plots) son una herramienta fundamental para visualizar la relaci贸n entre dos conjuntos de datos num茅ricos. En un gr谩fico de dispersi贸n, cada punto representa un par de valores (uno para el eje x y otro para el eje y), lo que permite identificar patrones, correlaciones y la distribuci贸n de los datos.

En Matplotlib, puedes crear gr谩ficos de dispersi贸n utilizando la funci贸n `plt.scatter(x, y)`, donde `x` e `y` son arrays similares a listas que contienen los datos para los ejes horizontal y vertical, respectivamente.

A diferencia de la funci贸n `plt.plot()`, que conecta los puntos con l铆neas, `plt.scatter()` muestra los puntos individualmente.

馃捇 C贸digo de Ejemplo: Creando un gr谩fico de dispersi贸n simple


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo
x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])

plt.scatter(x, y)
plt.xlabel("Eje X")
plt.ylabel("Eje Y")
plt.title("Gr谩fico de Dispersi贸n Simple")
plt.show()
            

Este c贸digo genera un gr谩fico de dispersi贸n donde cada punto representa un par de valores tomados de los arrays `x` e `y`. La posici贸n de cada punto en el gr谩fico indica la magnitud de estos valores.

馃搳 Ejemplo Visual Interactivo (Generado con JavaScript)

馃憜 Este gr谩fico generado con JavaScript muestra la representaci贸n visual de un gr谩fico de dispersi贸n, donde cada punto representa una observaci贸n.

Compare Plots

馃 Una de las ventajas de los gr谩ficos de dispersi贸n es la capacidad de **comparar m煤ltiples conjuntos de datos** en un mismo plano. Esto permite visualizar las relaciones entre diferentes variables o grupos de observaciones de manera simult谩nea.

Para comparar gr谩ficos de dispersi贸n, simplemente llamas a la funci贸n `plt.scatter()` varias veces, proporcionando los diferentes conjuntos de datos para `x` e `y` en cada llamada. Es importante distinguir visualmente cada conjunto de datos utilizando diferentes colores, marcadores o etiquetas en la leyenda.

馃捇 C贸digo de Ejemplo: Comparando dos gr谩ficos de dispersi贸n


import matplotlib.pyplot as plt
import numpy as np

# Primer conjunto de datos
x1 = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y1 = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])

# Segundo conjunto de datos
x2 = np.array([2, 2, 8, 1, 15, 8, 12, 9, 7, 3, 11, 4, 7, 14, 12])
y2 = np.array([100, 105, 84, 105, 90, 99, 90, 95, 94, 100, 79, 112, 91, 80, 85])

plt.scatter(x1, y1, color='blue', label='Grupo A')
plt.scatter(x2, y2, color='red', label='Grupo B')

plt.xlabel("Variable X")
plt.ylabel("Variable Y")
plt.title("Comparaci贸n de dos grupos de datos")
plt.legend() # Muestra la leyenda para identificar los grupos
plt.show()
            

En este ejemplo, hemos trazado dos conjuntos de datos diferentes en el mismo gr谩fico de dispersi贸n. Hemos utilizado el argumento `color` para distinguirlos (azul para el Grupo A y rojo para el Grupo B) y hemos a帽adido una leyenda utilizando `plt.legend()` para identificar cada grupo.

馃搳 Ejemplo Visual Interactivo (Generado con JavaScript)

馃憜 Este gr谩fico generado con JavaScript muestra dos conjuntos de puntos de diferentes colores, lo que permite comparar visualmente sus distribuciones.

Colors

馃帹 El **color** de los puntos en un gr谩fico de dispersi贸n puede ser una herramienta poderosa para distinguir diferentes grupos de datos o para a帽adir una dimensi贸n visual a la informaci贸n. Matplotlib ofrece una gran flexibilidad para controlar el color de los puntos.

Puedes especificar el color de todos los puntos en un gr谩fico de dispersi贸n utilizando el argumento `color` (o su abreviatura `c`) en la funci贸n `plt.scatter()`. Este argumento acepta varios tipos de valores, incluyendo:

  • Nombres de colores predefinidos (ej: `'red'`, `'green'`, `'blue'`, `'black'`, etc.).
  • C贸digos de color hexadecimal (ej: `'#FF0000'` para rojo, `'#00FF00'` para verde, `'#0000FF'` para azul).
  • Tuplas RGB o RGBA (ej: `(1, 0, 0)` para rojo, `(0, 1, 0, 0.5)` para verde con 50% de transparencia).

馃捇 C贸digo de Ejemplo: Especificando el color de los puntos


import matplotlib.pyplot as plt
import numpy as np

x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])

# Gr谩fico con todos los puntos en color verde
plt.scatter(x, y, color='green')
plt.xlabel("Eje X")
plt.ylabel("Eje Y")
plt.title("Gr谩fico de Dispersi贸n con Color 脷nico")
plt.show()

# Gr谩fico con todos los puntos en color rojo hexadecimal
plt.scatter(x, y, c='#FF0000')
plt.xlabel("Eje X")
plt.ylabel("Eje Y")
plt.title("Gr谩fico de Dispersi贸n con Color Hexadecimal")
plt.show()
            

En estos ejemplos, hemos creado dos gr谩ficos de dispersi贸n del mismo conjunto de datos, pero hemos especificado un color diferente para todos los puntos en cada gr谩fico utilizando el argumento `color`.

馃搳 Ejemplo Visual Interactivo (Generado con JavaScript)

馃憜 Este gr谩fico generado con JavaScript muestra un conjunto de puntos con un color uniforme especificado.

Color Each Dot

馃寛 Matplotlib te ofrece la posibilidad de asignar un **color diferente a cada punto** en un gr谩fico de dispersi贸n. Esto es extremadamente 煤til cuando tienes una tercera dimensi贸n de datos que quieres visualizar a trav茅s del color de los puntos.

Para colorear cada punto individualmente, debes pasar un **array de colores** al argumento `color` (o `c`) de la funci贸n `plt.scatter()`. La longitud de este array de colores debe ser la misma que la longitud de los arrays de datos `x` e `y`. Cada elemento del array de colores especificar谩 el color del punto correspondiente.

Puedes utilizar nombres de colores, c贸digos hexadecimales o tuplas RGB(A) dentro de este array de colores.

馃捇 C贸digo de Ejemplo: Coloreando cada punto individualmente


import matplotlib.pyplot as plt
import numpy as np

x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
colors = np.array(['red', 'green', 'blue', 'yellow', 'pink', 'black', 'orange', 'purple', 'brown', 'lime', 'cyan', 'magenta', 'gray'])

plt.scatter(x, y, color=colors)
plt.xlabel("Eje X")
plt.ylabel("Eje Y")
plt.title("Gr谩fico de Dispersi贸n con Colores Individuales")
plt.show()
            

En este ejemplo, hemos creado un array llamado `colors` que contiene un color diferente para cada punto de datos. Al pasar este array al argumento `color` de `plt.scatter()`, cada punto se dibuja con el color correspondiente de la lista.

馃搳 Ejemplo Visual Interactivo (Generado con JavaScript)

馃憜 Este gr谩fico generado con JavaScript muestra c贸mo cada punto puede tener un color distinto, basado en un array de colores.

ColorMap

馃尅️ Un **colormap** es una secuencia de colores que se utilizan para representar la variaci贸n de una tercera variable en un gr谩fico de dispersi贸n. En lugar de asignar un color fijo a cada punto, el color de cada punto se determina por su valor correspondiente en una tercera dimensi贸n de datos.

Para utilizar un colormap en Matplotlib, debes hacer lo siguiente:

  1. Proporcionar un array de valores para la tercera dimensi贸n al argumento `c` de la funci贸n `plt.scatter()`.
  2. Especificar el colormap que deseas utilizar con el argumento `cmap`. Matplotlib tiene una amplia variedad de colormaps disponibles (ver el siguiente tema).

Matplotlib normalizar谩 autom谩ticamente los valores de tu tercera dimensi贸n al rango del colormap, asignando colores de la secuencia del colormap a los puntos en funci贸n de sus valores.

Es com煤n incluir una **barra de color** (colorbar) para mostrar la correspondencia entre los colores y los valores de la tercera dimensi贸n. Esto se a帽ade utilizando la funci贸n `plt.colorbar()`.

馃捇 C贸digo de Ejemplo: Utilizando un colormap


import matplotlib.pyplot as plt
import numpy as np

x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
colors = np.array([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]) # Tercera dimensi贸n de datos

plt.scatter(x, y, c=colors, cmap='viridis') # 'viridis' es un colormap com煤n
plt.colorbar(label='Magnitud') # A帽ade una barra de color con una etiqueta
plt.xlabel("Eje X")
plt.ylabel("Eje Y")
plt.title("Gr谩fico de Dispersi贸n con Colormap")
plt.show()
            

En este ejemplo, el array `colors` representa la tercera dimensi贸n de datos. Al pasarlo al argumento `c` y especificar el colormap `'viridis'`, los puntos se colorean seg煤n estos valores. La barra de color muestra la escala de colores y su correspondencia con los valores de la magnitud.

馃搳 Ejemplo Visual Interactivo (Generado con JavaScript)

馃憜 Este gr谩fico generado con JavaScript simula el uso de un colormap, donde el color de cada punto var铆a seg煤n una tercera variable, y se incluye una leyenda de color.

Available ColorMaps

馃寛 Matplotlib ofrece una **amplia gama de colormaps** que puedes utilizar para visualizar la tercera dimensi贸n de tus datos en gr谩ficos de dispersi贸n. La elecci贸n del colormap adecuado puede influir significativamente en c贸mo se perciben los datos y en la efectividad de la comunicaci贸n visual.

Los colormaps en Matplotlib se organizan en varias categor铆as:

  • **Sequential:** Cambios graduales en la luminancia, a menudo con un cambio en el matiz. Adecuados para datos que tienen un orden desde bajo a alto. Ejemplos: `'viridis'`, `'magma'`, `'plasma'`, `'inferno'`, `'cividis'`, `'Greys'`, `'Blues'`, `'Greens'`, `'Reds'`.
  • **Diverging:** Dos rangos de variaci贸n de luminancia con un color intermedio t铆picamente claro o neutro. 脷tiles para datos que tienen un punto medio significativo, como desviaciones de cero. Ejemplos: `'coolwarm'`, `'bwr'`, `'RdBu'`, `'seismic'`.
  • **Qualitative:** Cambios r谩pidos de color sin un orden impl铆cito. 脷tiles para representar datos categ贸ricos o discretos. Ejemplos: `'tab10'`, `'tab20'`, `'Set1'`, `'Set2'`, `'Accent'`.
  • **Miscellaneous:** Colormaps que no encajan claramente en las categor铆as anteriores. Ejemplos: `'jet'`, `'rainbow'`, `'terrain'`. (Nota: algunos de estos pueden no ser perceptualmente uniformes).

Puedes especificar el nombre del colormap directamente en el argumento `cmap` de la funci贸n `plt.scatter()`. Es recomendable elegir colormaps que sean perceptualmente uniformes y amigables para personas con daltonismo, como `'viridis'` o `'cividis'` para datos secuenciales.

馃捇 C贸digo de Ejemplo: Visualizando algunos colormaps


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo (posici贸n com煤n para visualizar el efecto del colormap)
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
z = np.sqrt(x[:, np.newaxis]**2 + y[np.newaxis, :]**2) # Una funci贸n para generar una tercera dimensi贸n

colormaps = ['viridis', 'plasma', 'coolwarm', 'jet', 'Greys']

plt.figure(figsize=(12, 8))
for i, cmap_name in enumerate(colormaps):
    plt.subplot(2, 3, i + 1)
    plt.scatter(x, y, c=z, cmap=cmap_name)
    plt.title(cmap_name)
    plt.xticks([])
    plt.yticks([])

plt.tight_layout()
plt.show()
            

Este c贸digo genera una figura con cinco subgr谩ficos, cada uno mostrando los mismos datos de dispersi贸n coloreados con un colormap diferente de la lista `colormaps`. Esto permite visualizar c贸mo diferentes colormaps representan la misma tercera dimensi贸n de datos.

馃搳 Ejemplo Visual Interactivo (Generado con JavaScript)

馃憜 Esta 谩rea mostrar谩 visualizaciones de algunos colormaps comunes generados con JavaScript.

Size

馃敇 El **tama帽o** de los puntos en un gr谩fico de dispersi贸n es otra propiedad visual que puedes ajustar para mejorar la claridad o para representar una cuarta dimensi贸n de datos. Puntos m谩s grandes pueden destacar ciertas observaciones o indicar una mayor magnitud de alguna variable.

Puedes controlar el tama帽o de los puntos utilizando el argumento `s` (de "size") en la funci贸n `plt.scatter()`. Este argumento acepta:

  • Un **valor escalar:** Si proporcionas un 煤nico n煤mero, todos los puntos tendr谩n ese mismo tama帽o (en puntos al cuadrado).
  • Un **array de valores:** Si proporcionas un array de la misma longitud que tus datos `x` e `y`, cada punto tendr谩 un tama帽o diferente correspondiente al valor en el array `s`. Esto te permite mapear una cuarta dimensi贸n de tus datos al tama帽o de los puntos.

馃捇 C贸digo de Ejemplo: Controlando el tama帽o de los puntos


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo
x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])

# Tama帽o 煤nico para todos los puntos
plt.figure(figsize=(6, 4))
plt.scatter(x, y, s=100) # Todos los puntos con tama帽o 100
plt.title("Tama帽o 脷nico")
plt.show()

# Tama帽os diferentes para cada punto
sizes = np.array([20, 50, 100, 80, 60, 150, 30, 90, 40, 120, 110, 70, 55])
plt.figure(figsize=(6, 4))
plt.scatter(x, y, s=sizes) # Cada punto con un tama帽o diferente
plt.title("Tama帽os Variables")
plt.show()

# Combinando color y tama帽o
colors = np.array([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120])
plt.figure(figsize=(6, 4))
plt.scatter(x, y, c=colors, s=sizes, cmap='viridis')
plt.colorbar(label='Magnitud del Color')
plt.title("Color y Tama帽o Variables")
plt.show()
            

El primer gr谩fico muestra todos los puntos con el mismo tama帽o. El segundo gr谩fico muestra cada punto con un tama帽o diferente basado en el array `sizes`. El tercer gr谩fico combina el uso de color (basado en el array `colors` y un colormap) con el tama帽o variable.

馃搳 Ejemplo Visual Interactivo (Generado con JavaScript)

馃憜 Este gr谩fico generado con JavaScript ilustra c贸mo variar el tama帽o de los puntos en un gr谩fico de dispersi贸n.

Alpha

馃懟 La **transparencia** (o alpha) de los puntos en un gr谩fico de dispersi贸n controla qu茅 tan opacos o transparentes son los puntos. Ajustar la transparencia puede ser 煤til en varias situaciones:

  • **Manejar la sobreposici贸n:** Cuando tienes muchos puntos que se superponen, reducir la transparencia puede hacer que las 谩reas con mayor densidad de puntos aparezcan m谩s oscuras, revelando patrones que de otra manera estar铆an ocultos.
  • **A帽adir una dimensi贸n visual sutil:** Puedes usar la transparencia para codificar una quinta dimensi贸n de datos, aunque esto debe hacerse con cuidado para no dificultar la lectura del gr谩fico.

Puedes controlar la transparencia de los puntos utilizando el argumento `alpha` en la funci贸n `plt.scatter()`. El valor de `alpha` debe estar entre 0 y 1, donde 0 es completamente transparente y 1 es completamente opaco.

Al igual que con el color y el tama帽o, puedes proporcionar un valor escalar para aplicar la misma transparencia a todos los puntos, o un array de valores para aplicar una transparencia diferente a cada punto.

馃捇 C贸digo de Ejemplo: Controlando la transparencia (alpha)


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo con algunos puntos superpuestos
x = np.random.rand(100)
y = np.random.rand(100)

# Transparencia 煤nica para todos los puntos
plt.figure(figsize=(6, 4))
plt.scatter(x, y, alpha=0.5) # Puntos semi-transparentes
plt.title("Transparencia 脷nica (alpha=0.5)")
plt.show()

# Transparencia variable basada en la posici贸n en el array
alpha_values = np.linspace(0.1, 1, 100)
plt.figure(figsize=(6, 4))
plt.scatter(x, y, alpha=alpha_values)
plt.title("Transparencia Variable")
plt.show()

# Combinando color y transparencia
colors = np.random.rand(100)
plt.figure(figsize=(6, 4))
plt.scatter(x, y, c=colors, alpha=0.7, cmap='viridis')
plt.colorbar(label='Valor del Color')
plt.title("Color y Transparencia")
plt.show()
            

El primer gr谩fico muestra puntos semi-transparentes, lo que ayuda a visualizar las 谩reas de mayor densidad. El segundo gr谩fico aplica una transparencia que var铆a linealmente a lo largo de los puntos. El tercer gr谩fico combina el color con una transparencia uniforme.

馃搳 Ejemplo Visual Interactivo (Generado con JavaScript)

馃憜 Este gr谩fico generado con JavaScript ilustra c贸mo ajustar la transparencia de los puntos en un gr谩fico de dispersi贸n.

Combine Color Size and Alpha

✨ La verdadera potencia de los gr谩ficos de dispersi贸n se revela cuando **combinas m煤ltiples atributos visuales** para representar diferentes dimensiones de tus datos. Al usar simult谩neamente el color, el tama帽o y la transparencia de los puntos, puedes crear visualizaciones ricas en informaci贸n que revelan relaciones complejas.

Para combinar estas propiedades, simplemente pasa los arrays correspondientes a los argumentos `c` (o `color`), `s` (o `size`), y `alpha` en la funci贸n `plt.scatter()`. Aseg煤rate de que la longitud de estos arrays coincida con la longitud de tus datos `x` e `y` si deseas que cada punto tenga sus propias caracter铆sticas 煤nicas.

Al interpretar gr谩ficos que combinan m煤ltiples atributos, es crucial incluir una **leyenda** para el color (si se usa un colormap) y considerar si el tama帽o o la transparencia tambi茅n necesitan una explicaci贸n (por ejemplo, si el tama帽o representa una magnitud espec铆fica).

馃捇 C贸digo de Ejemplo: Combinando color, tama帽o y transparencia


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo (simulando 5 dimensiones)
np.random.seed(0)
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
sizes = (30 * np.random.rand(50))**2 # Tama帽os variables
alpha_values = np.linspace(0.3, 0.9, 50) # Transparencia variable

plt.figure(figsize=(8, 6))
scatter = plt.scatter(x, y, c=colors, s=sizes, alpha=alpha_values, cmap='viridis')
plt.colorbar(scatter, label='Valor del Color')
plt.xlabel("Dimensi贸n 1")
plt.ylabel("Dimensi贸n 2")
plt.title("Gr谩fico de Dispersi贸n Combinando Color, Tama帽o y Transparencia")
plt.show()
            

En este ejemplo, hemos utilizado arrays aleatorios para simular cinco dimensiones de datos (x, y, color, tama帽o y transparencia). El color est谩 mapeado a un colormap ('viridis'), el tama帽o var铆a seg煤n el array `sizes`, y la transparencia var铆a seg煤n `alpha_values`. La barra de color ayuda a interpretar la dimensi贸n representada por el color.

馃搳 Ejemplo Visual Interactivo (Generado con JavaScript)

馃憜 Este gr谩fico generado con JavaScript ilustra c贸mo combinar color, tama帽o y transparencia en un gr谩fico de dispersi贸n para codificar m煤ltiples dimensiones de datos.




Publicar un comentario

0 Comentarios