29
votes

I am plotting a heatmap in matplotlib using:

plt.pcolor(rand(5,5))

how can I annotate the heatmap with the actual numbers plotted? meaning in each cell of the plotted heatmap, put the value corresponding to that cell in the 5x5 matrix passed to pcolor. thanks.

2

2 Answers

49
votes

There is no automatic feature to do such a thing, but you could loop through each point and put text in the appropriate location:

import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(5, 4)
heatmap = plt.pcolor(data)

for y in range(data.shape[0]):
    for x in range(data.shape[1]):
        plt.text(x + 0.5, y + 0.5, '%.4f' % data[y, x],
                 horizontalalignment='center',
                 verticalalignment='center',
                 )

plt.colorbar(heatmap)

plt.show()

Code output

HTH

7
votes

The seaborn heatmap does the job automatically, by setting annot=True.

See this for an example.