2014-06-20 263 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