给二进制矩阵matplotlib上色

2024-09-30 14:24:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: inforlenso颜色npzeros矩阵
1条回答
网友
1楼 · 发布于 2024-09-30 14:24:00

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

当你将highlight乘以一个常数colourX中的最高值从1下降到0.21,但这对{}没有任何影响,因为色阶也会被调整,从而阻碍了你的意图。在

但是,如果您提供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()

enter image description here

相关问题 更多 >