2010-08-20 18 views
10

Empiezo a usar matplotlib hace un mes, así que todavía estoy aprendiendo.
Estoy tratando de hacer un mapa de calor con matshow. Mi código es el siguiente:etiquetas matplotlib matshow

data = numpy.array(a).reshape(4, 4) 
cax = ax.matshow(data, interpolation='nearest', cmap=cm.get_cmap('PuBu'), norm=LogNorm()) 
cbar = fig.colorbar(cax) 

ax.set_xticklabels(alpha) 
ax.set_yticklabels(alpha) 

donde alfa es un modelo de Django con 4fields: 'ABC', 'DEF', 'GHI', 'JKL'

la cosa es que no lo hago saber por qué, la etiqueta 'ABC' no aparece, dejando la última celda sin etiqueta.
Si alguien podría tener una idea de cómo modificar mi script de manera que aparezca el 'ABC' Le agradecería :)

Respuesta

24

Lo que pasa es que los xticks realidad se extienden fuera de la cifra que aparece cuando se utiliza matshow. (No estoy muy seguro de por qué es esto. Sin embargo, casi nunca he usado matshow).

Para demostrar esto, mira la salida de ax.get_xticks(). En tu caso, es array([-1., 0., 1., 2., 3., 4.]). Por lo tanto, cuando establece las etiquetas xtick, "ABC" está en < -1, -1> y no se muestra en la figura.

La solución más fácil es simplemente anteponer una etiqueta en blanco a su lista de etiquetas, p.

ax.set_xticklabels(['']+alpha) 
ax.set_yticklabels(['']+alpha) 

Como un ejemplo completo:

import numpy as np 
import matplotlib.pyplot as plt 

alpha = ['ABC', 'DEF', 'GHI', 'JKL'] 

data = np.random.random((4,4)) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
cax = ax.matshow(data, interpolation='nearest') 
fig.colorbar(cax) 

ax.set_xticklabels(['']+alpha) 
ax.set_yticklabels(['']+alpha) 

plt.show() 

Matshow example

+0

Gracias! He podido ver lo mismo :) Pero tengo otro problema ... Estoy haciendo dos mapas de calor, uno (4x4) y otro (9x9). El programa etiqueta el mapa de calor 0,2,4,6,8. Por eso, cuando traté de etiquetar, solo da un nombre a esos números. He intentado con ax.set_xticks (matplotlib.numpy.arange (len (list_names))) pero disminuye el tamaño de las celdas .. – pavid

+2

@Patricia - Si configura las ubicaciones de tilde manualmente, una llamada a 'ax .axis ('image') 'después de configurarlos debería solucionar el problema que describió. ¡Espero que ayude! –

+0

Gracias! Problema resuelto :) Entonces ax.axis ('imagen') restaurar el tamaño original de la imagen, ¿verdad? – pavid

Cuestiones relacionadas