web-dev-qa-db-fra.com

étiquettes matplotlib matshow

J'ai commencé à utiliser matplotlib il y a un mois, donc j'apprends toujours.
J'essaie de faire une carte thermique avec matshow. Mon code est le suivant:

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)

où alpha est un modèle de Django avec 4 champs: 'ABC', 'DEF', 'GHI', 'JKL'

le fait est que je ne sais pas pourquoi, l'étiquette "ABC" n'apparaît pas, laissant la dernière cellule sans étiquette.
.

23
psoares

Ce qui se passe, c'est que les xticks s'étendent réellement en dehors de la figure affichée lors de l'utilisation de matshow. (Je ne sais pas exactement pourquoi c'est. Je n'ai presque jamais utilisé de matshow, cependant.)

Pour illustrer cela, regardez la sortie de ax.get_xticks(). Dans votre cas, c'est array([-1., 0., 1., 2., 3., 4.]). Par conséquent, lorsque vous définissez les étiquettes xtick, "ABC" est à <-1, -1> et n'est pas affiché sur la figure.

La solution la plus simple consiste simplement à ajouter une étiquette vierge à votre liste d'étiquettes, par ex.

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

À titre d'exemple complet:

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

49
Joe Kington