繁体   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