1
highlightc = np.zeros([N, N])
print highlightc
c = len(highlightc)
colour = [0.21]*c
colour = np.array(colour)
print colour
for x, y in hl:
    highlightc[x, y] = 1##set so binary matrix knows where to plot
h=ax.imshow((highlightc*colour), interpolation='nearest',cmap=plt.cm.spectral_r)
fig.canvas.draw()

我已经创建了一个像这样的二进制矩阵,我想做的是通过将二进制矩阵乘以一个低于零的数字来使这些图具有某种颜色。但是我上面的代码并没有这样做,而且这些图仍然是黑色的。我很确定它与我的颜色数组有关,但我不知道如何编辑它,所以它是正确的。 highlightc是一个列表,其中包含[(1,109),(1,102),(67,102),etc]

4

1 回答 1

1

ax.imshow(X)调整色阶,使 X 中的最低值映射到最低颜色,X 中的最高值映射到cmap.

当您乘以highlight一个常数colour时,最高值X会从 1 下降到 0.21,但这没有影响,ax.imshow因为色阶也得到了调整,从而阻碍了您的意图。

但是,如果您提供vmin=0,vmax=1参数,则ax.imshow不会调整颜色范围——它将 0 与最低颜色相关联,将 1 与最高颜色相关联:

import numpy as np
import matplotlib.pyplot as plt

N = 150
highlightc = np.zeros([N, N])

M = 1000
hl = np.random.randint(N, size=(M, 2))
highlightc[zip(*hl)] = 1

colour = 0.21
fig, ax = plt.subplots()
h = ax.imshow(
    (highlightc * colour), interpolation='nearest', cmap=plt.cm.spectral_r,
    vmin=0, vmax=1)
plt.show()

在此处输入图像描述

于 2013-04-07T17:37:56.340 回答