[英]How to determine the colours when using matplotlib.pyplot.imshow()?
我正在使用imshow()來繪制2D numpy數組,例如:
my_array = [[ 2. 0. 5. 2. 5.]
[ 3. 2. 0. 1. 4.]
[ 5. 0. 5. 4. 4.]
[ 0. 5. 2. 3. 4.]
[ 0. 0. 3. 5. 2.]]
plt.imshow(my_array, interpolation='none', vmin=0, vmax=5)
繪制此圖像:
然而,我想要做的是改變顏色,例如0是RED,1是GREEN,2是ORANGE,你明白我的意思。 有沒有辦法做到這一點,如果是這樣,怎么樣?
我試過通過更改colourmap中的條目來嘗試這樣做,如下所示:
cmap = plt.cm.jet
cmaplist = [cmap(i) for i in range(cmap.N)]
cmaplist[0] = (1,1,1,1.0)
cmaplist[1] = (.1,.1,.1,1.0)
cmaplist[2] = (.2,.2,.2,1.0)
cmaplist[3] = (.3,.3,.3,1.0)
cmaplist[4] = (.4,.4,.4,1.0)
cmap = cmap.from_list('Custom cmap', cmaplist, cmap.N)
但它沒有像我預期的那樣工作,因為0 =顏色映射中的第一個條目,但是例如1個!=顏色映射中的第二個條目,因此只有0被不同地繪制:
我認為最簡單的方法是使用ListedColormap
,並可選擇使用BoundaryNorm
來定義bins
。 鑒於上面的數組:
import matplotlib.pyplot as plt
import matplotlib as mpl
colors = ['red', 'green', 'orange', 'blue', 'yellow', 'purple']
bounds = [0,1,2,3,4,5,6]
cmap = mpl.colors.ListedColormap(colors)
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
plt.imshow(my_array, interpolation='none', cmap=cmap, norm=norm)
由於數據值與顏色邊界一對一地映射,因此normalizer
是多余的。 但我已經把它包括在內以表明它是如何使用的。 例如,當您希望值0,1,2為紅色,3,4,5綠色等時,您可以將邊界定義為[0,3,6 ...]。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.