Я уверен, что есть более чистый способ сделать это, но это работает -
import matplotlib.pyplot as plt
import numpy as np
d={(0, 0) : 0.04679,
(0, 2) : 0.10936,
(0, 4) : 0.17872000000000005,
(2, 4) : 0.15046000000000004,
(4, 4) : 0.026240000000000003,
(1, 1) : 0.02055,
(1, 2) : 0.10275
(3, 3) : 0.84,
(3, 2) : 0.62
}
x = []
y = []
v = []
for e in d.items():
x.append(e[0][0])
y.append(e[0][1])
v.append(e[1])
m = np.zeros((max(x)+1, max(y)+1))
for ii in range(len(v)):
m[x[ii]][y[ii]] = v[ii]
plt.matshow(m, cmap=plt.get_cmap('gray'), vmin=0.0, vmax=1.0)
plt.show()

Идея здесь состоит в том, чтобы разобрать словарь в двумерный массив, который затем может быть непосредственно нанесен с помощью plt.matshow()
. Если вы хотите, чтобы пропущенные значения заполнялись единицами вместо нулей, вы можете использовать m = np.ones()
вместо np.zeros()
. Если вы не хотите, чтобы минимальное и максимальное значения были установлены на 0.0
и 1.0
соответственно, вы можете просто пропустить vmin=0.0
и vmax=1.0
в вызове на matshow()
.