2014-06-20 224 views
4

我正在根据变量值中设置的值绘制修补程序。PatchCollection的Matplotlib颜色条替换颜色

pc = PatchCollection(patches, match_original=True) 

norm = Normalize() 
cmap = plt.get_cmap('Blues') 
pc.set_facecolor(cmap(norm(values))) 
ax.add_collection(pc) 

enter image description here

现在我也想要一个额外的彩条。如果我插嘴(例如set_facecolor之前)

pc.set_array(values) # values 
plt.colorbar(pc) 

enter image description here

它的工作原理,但现在所有的颜色都变成一个灰度。以下set_facecolor不会更改任何内容。即使当我在plt.colorbar()中添加cmap=命令时,所有内容仍然保持灰度。我不知道该怎么做。

回答

3

你问的是如何通过特定的颜色表为一个集合着色?

只需设置颜色表(cmap)以及array即可。

例如:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.collections import PatchCollection 

num = 10 
data = np.random.random((num, 2)) 
values = np.random.normal(10, 5, num) 

# I'm too lazy to draw irregular polygons, so I'll use circles 
circles = [plt.Circle([x, y], 0.1) for (x,y) in data] 
col = PatchCollection(circles) 

col.set(array=values, cmap='jet') 

fig, ax = plt.subplots() 

ax.add_collection(col) 
ax.autoscale() 
ax.axis('equal') 

fig.colorbar(col) 
plt.show() 

enter image description here

为了解释发生了什么事情在你的问题:

对于收藏,facecolors可手动设置(即set_facecolors)或他们colormapped到由颜色条控制的一系列值(set_array)。这两个选项是相互排斥的。因此,在您拨打set_array后,原始的面部颜色将被忽略。

+0

你知道我怎么能为不透明的颜色添加颜色@Joe?我试图这样做,但没有成功。 http://stackoverflow.com/questions/30966008/individual-color-and-alpha-values-in-path-collection-matplotlib-python谢谢。 – pceccon

+1

@pceccon - 不知道为什么你的问题downvoted(然后关闭)。这是一个很好的问题。无论如何,如果你使用'set_array',不透明度或者由colormap控制,或者由一个单独的全局'alpha'值控制。你究竟想要做什么?如果您希望不透明度随颜色变化而定期变化,那么这是可能的(您需要一个自定义颜色映射)。 –

+0

嗨@Joe,经过两次反对票(不知道为什么)以及大量的研究,我设法做到了,并删除了问题。谢谢你试图帮助我。 (: – pceccon