es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo unir la barra de colores para subtramas hist2d?

Creé un gráfico de múltiples subtramas en matplotlib utilizando la función hist2d.
Cada una de las subtramas muestra un rango diferente de datos y la cuarta subtrama muestra la suma de todas las demás subtramas.

Todo es perfecto excepto el hecho de que la barra de colores no está unificada para todas las subtramas…
Vi que todas las soluciones para este problema requieren convertir los datos en una imagen (por ejemplo, mediante imshow), y eso realmente desordena mi gráfico.

Quiero que los gráficos se mantengan como están y solo cambiar los colores.
¿Alguien tiene alguna idea de cómo hacerlo?

Gracias 🙂

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución es establecer manualmente los valores mínimos y máximos para la barra de color utilizando los argumentos vmin y vmax al crear la barra de color. Esto asegura que todos los subplots compartan la misma escala de color.

    Por ejemplo:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # Generar algunos datos de ejemplo
    data1 = np.random.normal(0, 1, (1000, 2))
    data2 = np.random.normal(2, 1, (1000, 2))
    data3 = np.random.normal(-2, 1, (1000, 2))
    
    # Crear subplots
    fig, axes = plt.subplots(2, 2, figsize=(8, 8))
    
    # Graficar datos en los subplots
    h1 = axes[0, 0].hist2d(data1[:, 0], data1[:, 1])
    h2 = axes[0, 1].hist2d(data2[:, 0], data2[:, 1])
    h3 = axes[1, 0].hist2d(data3[:, 0], data3[:, 1])
    
    # Crear barra de color con escala compartida
    cb = plt.colorbar(h3[3], ax=axes.ravel().tolist(), shrink=0.6)
    cb.set_label('Conteos')
    
    # Establecer valores mínimos y máximos para la barra de color
    cb.set_clim(0, max(h1[0].max(), h2[0].max(), h3[0].max()))
    
    # Agregar un cuarto subplot para mostrar la suma de todos los datos
    axes[1, 1].imshow(h1[0] + h2[0] + h3[0], cmap='viridis')
    
    plt.show()
    

    En este ejemplo, generamos datos aleatorios y creamos una matriz de subplots de 2×2 utilizando plt.subplots. Luego, se grafican los datos utilizando hist2d y se captura la salida para establecer los valores mínimos y máximos de la barra de color. Finalmente, se agrega un cuarto subplot para mostrar la suma de todos los datos utilizando imshow.

    Ten en cuenta que esta solución asume que todos los datos son positivos. Si algunos de los datos son negativos, deberás ajustar el valor mínimo de la barra de color en consecuencia.

Comments are closed.