我有一个包含两个非负整数(a,b)的元组字典,其中a和b都最多为20。该字典将每个元组映射为一个介于0和1之间的浮点值。我想创建一个二维网格,其中第i列和第j行(对应于元组(i,j))的单位正方形用白色和黑色之间的灰度值着色,并且与其浮动值。
为澄清起见,我的字典看起来像:
dict={(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
...
}
我不确定如何进行绘制。任何帮助将不胜感激!
答案 0 :(得分:1)
我敢肯定有一种更干净的方法可以做到这一点,但这可行-
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()
这里的想法是将字典解析为2D numpy数组,然后可以由plt.matshow()
直接绘制该数组。如果您希望丢失的值以1而不是0填充,则可以使用m = np.ones()
而不是np.zeros()
。如果您不希望将最小值和最大值分别固定为0.0
和1.0
,则可以在调用vmin=0.0
时简单地省略vmax=1.0
和matshow()
。 / p>