在matplotlib中为特定点设置不同颜色的矩阵

0 投票
1 回答
1385 浏览
提问于 2025-04-17 18:42

我有一个矩阵,使用 self.ax.imshow(arr,cmap=plt.cm.Greys_r, interpolation = 'none') 在 matplotlib 中绘制出来。现在这些矩阵的颜色都是一样的。不过,我还有一个和这个矩阵大小相同的数组,这个数组里包含从 0 到 1 的数字。这个数组里的每个数字都对应矩阵上的一个点。
我想知道怎么才能让这个包含 0 到 1 的数组对应到矩阵上点的颜色上。

我有一个数组 numberlist = [(1,34),(2,35),(5,78) 等等],一直到 310。然后我执行了

data = np.array(number list)
N=data.max()+5
arr=np.ones((N,N),dtype='bool')
arr[data[:,1],data[:,0]]=0

接着就是上面的 imshow。

1 个回答

0

根据你的修改,我觉得你想表达的是:

  • 你有一个 boolean 数组,用来告诉你某个点是否应该被绘制。
  • 你还有一个 float 数组,用来告诉你如果这个点被绘制,它应该是什么颜色。

我想把这两个数组称为: arr_boolarr_val

把它们相乘,当 arr_bool 是真的时候,你会得到一个浮点数(颜色值),而当它是假的时候,你会得到零。我们可以用它们的乘积来上色:

N = 10
arr_bool = np.random.random_integers(0,1,(N,N))
arr_val  = np.random.rand(N,N)
imshow(arr_bool*arr_val, cmap = cm.spectral_r, interpolation = 'nearest')

所以,如果我们只绘制 arr_bool,它看起来会是这样: boolean array 如果我们只绘制颜色,也就是 arr_valvalue array 把它们结合在一起, arr_bool * arr_valcolored array

撰写回答