创建matplotlib PolyCollection色彩映射将每个单元格映射到一种颜色

时间:2015-03-11 14:05:51

标签: python matplotlib

我试图用matplotlib PolyCollection绘制3D图形的2D切片,但我想为每个单元格设置不同的颜色。有没有办法轻松创建一个色彩图来完成这个?

我有一组顶点我正在绘制,然后使用array参数将2D数组放在这些顶点中。我还有一个2D列表,其中包含每个单元格的RGB值。如何从此2D RGB列表生成色彩映射以与PolyCollection配对?

例如:

import numpy
x = numpy.arange(4).reshape(2,2)
colors = [[(.2, .2, .3), (0, 0, 0)], [(.5, .5, .5), (.6, .3, .8)]]

我希望(0,0)处的单元格为(。2,.2,.3)和(0,1)为(0,0,0)。

我猜我需要一些Normalize的组合 实例和a ListedColormap

或者,有没有办法只传递一个RGB值数组 PolyCollection作为array参数,以便每个'值'简直就是颜色 细胞?

1 个答案:

答案 0 :(得分:2)

如果您有一系列2D颜色,则可以使用facecolors kwarg(或等效collection.set_facecolors(rgb_seq)

但是,如果您以其他方式制作了PolyCollectionax.pcolor或以其他方式调用collection.set_array(some_data),则需要禁用标量颜色映射通过调用collection.set_array(None)行为。

举个例子:

import numpy as np
import matplotlib.pyplot as plt

rgb = np.random.random((100, 3))

fig, ax = plt.subplots()
coll = ax.pcolor(np.zeros((10, 10)))

# If we left out the "array=None", the colors would still be controlled by the
# values of the array we passed in, and the "facecolors" kwarg would be
# ignored. This is equivalent to calling `coll.set_array(None)` and then
# `coll.set_facecolors(rgb)`.
coll.set(array=None, facecolors=rgb)

plt.show()

enter image description here