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.

Agrupando las marcas de selección para mapas de calor

Tengo un mapa de calor que se ve así (de: https://stackoverflow.com/questions/33282368/plotting-a-2d-heatmap-with-matplotlib).
aquí.

Estoy tratando de crear un mapa de calor que no tenga las etiquetas de marca de ticks para cada valor, sino que estén agrupadas por rangos. Por ejemplo, las primeras tres marcas de ticks no han sido marcadas pero se han marcado con una sola marca ‘Manzanas’.

Parece fácil deshabilitar las etiquetas de marca de ticks por completo utilizando:

plt.tick_params(
    axis='x',
    which='both',
    bottom=False,
    top=False,
    labelbottom=False)

o elegir solo las marcas de ticks seleccionadas:

for (i,l) in enumerate(ax.xaxis.get_ticklabels()):
    if i == 0 or i == 4 or i == 5:
        l.set_visible(True)
    else:
        l.set_visible(False)

¿pero se podría hacer como se muestra abajo?

aquí.

Un código de ejemplo para un mapa de calor:

corr = np.corrcoef(np.random.randn(10, 200))
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True
with sns.axes_style("white"):
    ax = sns.heatmap(corr, mask=mask, vmax=.3, square=True,  cmap="YlGnBu")
    plt.show()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible agrupar las etiquetas de las marcas de tique en un mapa de calor. Una forma de hacerlo es utilizando el método set_xticklabels() proporcionado por la función heatmap de la siguiente manera:

    # Ejemplo de código para agrupar las etiquetas de las marcas de tique en rangos de 3
    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    data = np.random.randint(low=1, high=20, size=(10,10))
    ranges = list(range(0, data.shape[1], 3)) # crear rangos de 3
    label_ranges = [f"{i}-{i+2}" for i in ranges] # crear etiquetas para los rangos
    
    with sns.axes_style("white"):
        ax = sns.heatmap(data, cmap="YlGnBu")
        ax.set_xticks(ranges)
        ax.set_xticklabels(label_ranges)
        plt.show()
    

    Este código establece las posiciones de las marcas de tique en los rangos definidos por la lista ranges y asigna valores de etiqueta a ellas basándose en la lista label_ranges. En nuestro ejemplo, agrupamos las etiquetas de las marcas de tique en rangos de 3 y asignamos etiquetas que corresponden a los límites inferior y superior de cada rango. El mapa de calor resultante tendrá solo una etiqueta por grupo de marcas de tique, lo que reduce el desorden y facilita su lectura.

Comments are closed.