Home > Software engineering >  how to turn dictionary of integers into a heat map using matplotlib
how to turn dictionary of integers into a heat map using matplotlib

Time:06-07

I am wondering how I can make a heatmap using matplotlib. I cant really explain it so ill just show you an example. here is an example grid

1 4
3 2

it is stored in a dictionary like this

grid{
 '0,0' : 1 #top left
 '1,0' : 4 #top right
 '0,1' : 3 #bottom left
 '1,1' : 2 #bottom right
}

I was wondering how I can convert this dictionary into a heat map using matplotlib.

CodePudding user response:

Here's a very barebones example:

import matplotlib.pyplot as plt

grid = {'0,0': 1, '1,0': 4, '0,1': 3, '1,1': 2}

n = int(len(grid) ** 0.5)
z = [[0 for _ in range(n)] for _ in range(n)]
for coord, heat in grid.items():
    i, j = map(int, coord.split(","))
    z[j][i] = heat

fig, ax = plt.subplots()
im = ax.imshow(z)

for i in range(n):
    for j in range(n):
        text = ax.text(j, i, z[i][j], ha="center", va="center", color="w")

fig.tight_layout()
plt.show()

basic heatmap plot

Note that I assume you're plotting in a square grid (hence how n is calculated). You'd need to wrangle your data a bit more if this isn't the case.

The main takeaway however, is that you need to figure out a way to store your z values as a 2D array. In this case, we used the dictionary keys to get the row, col pair where the value should go, and ended up with the array:

[[1, 4], [3, 2]]

Of course, now you'll need to style the plot. I suggest taking a look at the docs.

  • Related