如何在matplotlib中为网格网格分配RGB颜色值

5 投票
1 回答
5769 浏览
提问于 2025-04-17 06:24

请看这个简化的代码片段:

import numpy as np

x = np.arange(3)
y = np.arange(2)

X, Y = np.meshgrid(x,y)

我想把已经准备好的颜色值分配给每个网格单元。我有与XY网格形状相同的颜色值,这些颜色值是每个RGB通道的标准化RGB值——所以我有3个numpy数组,每个数组的值在0到1之间,表示通道的值。

我最开始尝试使用matplotlib.pyplot.pcolor,因为它看起来正好是我想要的工具,但我不太明白颜色映射是怎么回事。

看起来颜色数组(文档中的C)是映射到默认的(或者手动指定的)颜色图上,但我搞不懂这个颜色数组里的值是怎么来的,以及它的作用是什么。
如果这些值是根据网格单元的值映射到默认(或指定的)颜色图上的,那C颜色数组的目的又是什么呢?
我手动为上面的例子创建了这个C数组(2x1的numpy数组),但无论它的值是什么,我得到的颜色似乎只依赖于网格单元的值,而不是这个C数组里的值。

所以我在这里有点困惑,想请教一下,帮助不一定要解释这个pcolor函数,但也许可以告诉我用matplotlib给网格分配颜色值的正确方法是什么。

1 个回答

4

你应该使用 imshow 而不是 pcolor。不过,你也可以用 pcolorpcolormesh 来实现这个效果。

import numpy as np
import matplotlib.pyplot as plt

# Make some random data to represent your r, g, b bands.
ny, nx = 2, 3
r, g, b = [np.random.random(ny*nx).reshape((ny, nx)) for _ in range(3)]

c = np.dstack([r,g,b])

plt.imshow(c, interpolation='nearest')
plt.show()

在这里输入图片描述

撰写回答