根据python matplotlib中的数据集使用颜色渐变生成网格

时间:2019-04-11 01:14:03

标签: python matplotlib

我有一个包含两个非负整数(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
      ...
      }

我不确定如何进行绘制。任何帮助将不胜感激!

1 个答案:

答案 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.01.0,则可以在调用vmin=0.0时简单地省略vmax=1.0matshow()。 / p>