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]的列表

最佳答案

ax.imshow(X)调整颜色比例,以使X中的最低值映射到最低颜色,而X中的最高值映射到cmap中最高的颜色。

当您将highlight乘以常数colour时,X中的最大值从1降至0.21,但这对ax.imshow没有影响,因为还调整了色阶,从而挫败了您的意图。

但是,如果提供vmin=0vmax=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()

关于python - 彩色二进制矩阵matplotlib,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15865029/

10-13 06:43