Me gustaría hacer un mapa de calor como este (que se muestra en FlowingData ):
Los datos de origen están aquí , pero los datos aleatorios y las etiquetas estarían bien para usar, es decir
import numpy
column_labels = list('ABCD')
row_labels = list('WXYZ')
data = numpy.random.rand(4,4)
Hacer el mapa de calor es bastante fácil en matplotlib:
from matplotlib import pyplot as plt
heatmap = plt.pcolor(data)
E incluso encontré argumentos de un mapa de colores que parecen correctos:heatmap = plt.pcolor(data, cmap=matplotlib.cm.Blues)
Pero más allá de eso, no puedo averiguar cómo mostrar etiquetas para las columnas y filas y mostrar los datos en la orientación adecuada (origen en la parte superior izquierda en lugar de en la parte inferior izquierda).
Todos los intentos de manipular heatmap.axes
(por ejemplo heatmap.axes.set_xticklabels = column_labels
) han fallado. ¿Que me estoy perdiendo aqui?
python
matplotlib
data-visualization
heatmap
Jason Sundram
fuente
fuente
Respuestas:
Esto es tarde, pero aquí está mi implementación en Python del mapa de calor de la NBA de datos fluidos.
actualizado: 1/4/2014 : gracias a todos
La salida se ve así:
Hay un cuaderno ipython con todo este código aquí . He aprendido mucho de 'overflow, así que espero que alguien lo encuentre útil.
fuente
pcolor
así, pero también se muestran valores numéricos. O: Quiero hacer un matplotlibtable
que coloree sus celdas. He visto soluciones al otro problema y son estéticamente feas. Esto se ve muy bien, si tan solo supiera cómo superponer los números.El módulo de python seaborn se basa en matplotlib y produce un mapa de calor muy agradable.
A continuación se muestra una implementación con seaborn, diseñada para el portátil ipython / jupyter.
La salida se ve así: utilicé el mapa de colores matplotlib Blues, pero personalmente encuentro los colores predeterminados bastante hermosos. Usé matplotlib para rotar las etiquetas del eje x, ya que no pude encontrar la sintaxis de seaborn. Como señaló grexor, fue necesario especificar las dimensiones (fig.set_size_inches) por prueba y error, lo que me pareció un poco frustrante.
Como señaló Paul H, puede agregar fácilmente los valores a los mapas de calor (annot = True), pero en este caso no pensé que mejorara la figura. Se tomaron varios fragmentos de código de la excelente respuesta de joelotz.
fuente
El problema principal es que primero debe establecer la ubicación de sus tics xey. Además, ayuda a utilizar la interfaz más orientada a objetos para matplotlib. Es decir, interactúe con el
axes
objeto directamente.Espero que ayude.
fuente
heatmap.axes
propiedad, que por alguna razón no hace nada.ax.xaxis.set_label_position('top')
sin éxito.annot=True
cuando se llama ( stanford.edu/~mwaskom/software/seaborn/generated/… )Alguien editó esta pregunta para eliminar el código que usé, así que me vi obligado a agregarlo como respuesta. ¡Gracias a todos los que participaron en responder esta pregunta! Creo que la mayoría de las otras respuestas son mejores que este código, solo dejo esto aquí para fines de referencia.
Gracias a Paul H y a unutbu (que respondió a esta pregunta ), tengo un resultado bastante atractivo:
Y aquí está la salida:
fuente