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.

El gráfico de calor de Seaborn sigue agregando barras de color en un bucle sobre los conjuntos de datos.

Estoy intentando trazar mapas de calor en un bucle sobre varios conjuntos de datos, pero con cada nuevo mapa de calor, se agrega una nueva barra de colores (el mapa se ve bien y no se agregan mapas adicionales). Podría usar una solución alternativa al restablecer la barra de colores dentro del bucle, pero preferiría saber qué está pasando y tener una solución más limpia. ¡Gracias de antemano por cualquier ayuda!

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns;

# leer archivo
atlas = ['A','B','C','D']
output_path = '/Users/polo/Desktop/Heatmaps/'

for at in range(len(atlas)):
    data = pd.read_csv('/Users/polo/Desktop/correl_input_{}.csv'.format(atlas[at]))
    hmap = sns.heatmap(data, cmap='seismic', linewidths=.5, vmin=-0.1, vmax=0.1)
    hmap.set_ylim(0, 5)
    plt.savefig(output_path + 'Heatmap_{}.png'.format(atlas[at]), dpi=1200, bbox_inches='tight')
    #plt.savefig('{}_plot.png', format='png', dpi=1200, bbox_inches='tight')
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que cada vez que se ejecuta el bucle, se crea un nuevo objeto “heatmap” y, por lo tanto, también se crea una nueva barra de colores. Una solución a esto es crear el objeto “heatmap” fuera del bucle y solo actualizar sus datos dentro del bucle. De esta manera, la barra de colores se mantendrá igual durante todo el bucle. Aquí tienes un ejemplo:

    import pandas as pd
    import matplotlib.pyplot as plt
    import numpy as np
    import seaborn as sns; 
    
    # leer archivo
    atlas = ['A','B','C','D']
    output_path = '/Users/polo/Desktop/Heatmaps/'
    
    # crear objeto "heatmap"
    hmap = sns.heatmap(np.empty((5,5)), cmap='seismic', linewidths=.5, vmin=-0.1, vmax=0.1)
    hmap.set_ylim(0, 5)
    
    for at in range(len(atlas)):
        data = pd.read_csv('/Users/polo/Desktop/correl_input_{}.csv'.format(atlas[at]))
        hmap.set_data(data)  # actualizar datos del "heatmap"
        plt.savefig(output_path + 'Heatmap_{}.png'.format(atlas[at]), dpi=1200, bbox_inches='tight')
        #plt.savefig('{}_plot.png', format='png', dpi=1200,bbox_inches='tight')
    

    En este código actualizado, se crea el objeto “hmap” fuera del bucle con un array vacío, y se llama a su método “set_data” dentro del bucle para actualizar sus datos con el conjunto de datos actual. De esta manera, la barra de colores se mantiene igual durante todo el bucle y solo cambian los datos del “heatmap”.

Comments are closed.