簡體   English   中英

使用matplotlib.pyplot.imshow()時如何確定顏色?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM