python – 如何在使用matplotlib.pyplot.imshow()时确定颜色?

weixin_38076068 2019-09-12 01:42:45
我正在使用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被不同地绘制:
...全文
857 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38082806 2019-09-12
  • 打赏
  • 举报
回复
我认为最简单的方法是使用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 …].

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧