2010-08-20 12 views
10

Inizio a utilizzare matplotlib un mese fa, quindi sto ancora imparando.
Sto provando a fare una heatmap con matshow. Il mio codice è il seguente:matplotlib matshow labels

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) 

dove alfa è un modello da django con 4fields: 'ABC', 'DEF', 'GHI', 'JKL'

il fatto è che non lo faccio sapere perché, l'etichetta "ABC" non appare, lasciando l'ultima cella senza etichetta.
Se qualcuno avrebbe avuto un indizio su come modificare il mio script in modo di apparire il 'ABC' Le sarei grato :)

risposta

24

Quello che sta succedendo è che le xticks in realtà si estendono al di fuori della figura visualizzato quando si utilizza matshow. (Non sono proprio sicuro del perché sia ​​così. Non ho quasi mai usato matshow, però.)

Per dimostrarlo, guarda l'output di ax.get_xticks(). Nel tuo caso, è array([-1., 0., 1., 2., 3., 4.]). Pertanto, quando si impostano le etichette xtick, "ABC" è a < -1, -1> e non viene visualizzato nella figura.

La soluzione più semplice è semplicemente aggiungere un'etichetta vuota al proprio elenco di etichette, ad es.

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

Come un esempio 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

Grazie! Sono stato in grado di vedere la stessa cosa :) Ma ho un altro problema .. Sto facendo due heatmap, una (4x4) e un'altra (9x9). Il programma etichetta la heatmap 0,2,4,6,8 .. Quindi quando ho provato ad etichettare, dà solo un nome a quei numeri. Ho provato con ax.set_xticks (matplotlib.numpy.arange (len (list_names))) ma diminuisce la dimensione delle celle .. – pavid

+2

@Patricia - Se si impostano manualmente le posizioni di spunta, una chiamata a 'ax .axis ('image') 'dopo averli impostati dovrebbe risolvere il problema che hai descritto. Spero possa aiutare! –

+0

Grazie! Problema risolto :) Quindi ax.axis ('immagine') ripristina la dimensione originale dell'immagine, giusto? – pavid