2010-08-20 16 views
10

Ich benutze matplotlib vor einem Monat, also lerne ich immer noch.
Ich versuche eine Heatmap mit Matshow zu machen. Mein Code ist folgende: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) 

wo alpha ist ein Modell von django mit 4fields: 'ABC', 'DEF', 'GHI',

'JKL'

die Sache ist, dass ich nicht wissen warum, die Bezeichnung "ABC" erscheint nicht, die letzte Zelle ohne Label verlassen.
Wenn jemand eine Ahnung haben würde, wie mein Skript in einer Art und Weise zu modifizieren, um das ‚ABC‘ erscheinen würde ich :)

Antwort

24

dankbar sein Was passiert ist, dass die xticks tatsächlich außerhalb der angezeigten Zahl erstrecken, wenn matshow verwenden. (Ich bin nicht ganz sicher, warum genau das ist. Ich habe fast nie Mattshow verwendet.)

Um dies zu zeigen, schauen Sie sich die Ausgabe von ax.get_xticks(). In Ihrem Fall ist es array([-1., 0., 1., 2., 3., 4.]). Wenn Sie die Xtick-Beschriftungen festlegen, lautet "ABC" daher < -1, -1> und wird in der Abbildung nicht angezeigt.

Die einfachste Lösung besteht darin, ein leeres Etikett Ihrer Etikettenliste, z.

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

Als Full Beispiel:

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

Vielen Dank! Ich konnte das gleiche sehen :) Aber ich habe ein anderes Problem..Ich mache zwei Heatmaps, eine (4x4) und eine andere (9x9). Das Programm beschriftet die Heatmap 0,2,4,6,8 .. Also, als ich versuchte zu beschriften, gibt es nur einen Namen für diese Zahlen. Ich habe versucht mit ax.set_xticks (matplotlib.numpy.arange (len (list_names))) aber es die Größe der Zellen verringern .. – pavid

+2

@Patricia - Wenn Sie die Tick-Standorte manuell, einen Aufruf von 'ax .axis ('image') 'nachdem Sie sie festgelegt haben, sollte das Problem beheben, das Sie beschrieben haben. Ich hoffe, das hilft! –

+0

Danke! Problem gelöst :) Also ax.axis ('image') die Originalgröße des Bildes wiederherstellen, oder? – pavid