Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matplotlib matshow labels

I start using matplotlib a month ago, so I'm still learning.
I'm trying to do a heatmap with matshow. My code is the following:

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) 

where alpha is a model from django with 4fields: 'ABC', 'DEF', 'GHI', 'JKL'

the thing is that I don't know why, the label 'ABC' doesn't appear, leaving the last cell without label.
If someone would have a clue how to modify my script in a way to appear the 'ABC' I would be grateful :)

like image 262
psoares Avatar asked Aug 20 '10 09:08

psoares


People also ask

What does PLT Matshow do?

Display an array as a matrix in a new figure window. The origin is set at the upper left hand corner and rows (first dimension of the array) are displayed horizontally. The aspect ratio of the figure window is that of the array, unless this would make an excessively short or narrow figure.

How do you use the Colorbar in Python?

colorbar() in python. The colorbar() function in pyplot module of matplotlib adds a colorbar to a plot indicating the color scale. Parameters: ax: This parameter is an optional parameter and it contains Axes or list of Axes.


1 Answers

What's happening is that the xticks actually extend outside of the displayed figure when using matshow. (I'm not quite sure exactly why this is. I've almost never used matshow, though.)

To demonstrate this, look at the output of ax.get_xticks(). In your case, it's array([-1., 0., 1., 2., 3., 4.]). Therefore, when you set the xtick labels, "ABC" is at <-1, -1>, and isn't displayed on the figure.

The easiest solution is just to prepend a blank label to your list of labels, e.g.

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

As a full example:

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

like image 182
Joe Kington Avatar answered Sep 29 '22 21:09

Joe Kington