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 :)
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.
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.
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With