如何使用matplotlib为网格网格分配RGB颜色值

5
请考虑这个简化的代码片段:
import numpy as np

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

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

我想为每个网格单元分配预先准备好的颜色值。对于每个RGB通道,我都有与XY网格形状相同的颜色值作为归一化RGB值 - 因此它是由0到1的浮点数组成的3个numpy数组,表示通道值。
我首先尝试使用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()

enter image description here


2
非常好!那是MODIS数据吗?另外,对于连续数据,您可能不想要我在示例中指定的“nearest”插值。默认的插值方法是双线性插值,它会更适合您的数据。 - Joe Kington
再次感谢您的插值提示,使用matplotlib缩放图像,在1:1时当然很美。而且您是对的 - 我觉得您仅通过图像的一部分就能发现这一点真是太神奇了 :) 干杯 - theta
这似乎对于 pcolor 不起作用,并返回错误 ValueError: too many values to unpack。也许,pcolor 只接受1D或2D数组作为颜色参数。有没有办法让它适用于 pcolor - lovespeed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接