python imshow彩色_python – 如何在使用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来定义bin.鉴于上面的数组:

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)

由于数据值与颜色边界一对一地映射,因此规范化器是多余的.但我已经把它包括在内以表明它是如何使用的.例如,当您希望值0,1,2为红色,3,4,5绿色等时,您可以将边界定义为[0,3,6 …].

标签:python,matplotlib,colors,draw

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值