我试图用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
参数,以便每个'值'简直就是颜色
细胞?
答案 0 :(得分:2)
如果您有一系列2D颜色,则可以使用facecolors
kwarg(或等效collection.set_facecolors(rgb_seq)
。
但是,如果您以其他方式制作了PolyCollection
到ax.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()