python 根据值找键_python如何根据不同的值赋不同的颜色?

f61046e52d33bda21e1a20996763c1cd.png

在绘制二维数组的时候,有时需要根据不同的值赋不同的颜色,比如数组中只有0,1,2,3四个整数,那如何绘制呢?

首先了解下面两个函数(详见:官网[1]):

  1. ListedColormap(colors[, name, N]):从颜色列表中生成的调色板对象。
  • colors:颜色列表
  • name:可选,标识调色板的字符串
  • N:可选,颜色数目
  1. BoundaryNorm(boundaries, ncolors[, clip, extend]) :基于离散区间生成调色板索引。
  • boundaries:单调递增的边界序列
  • ncolors:颜色图中要使用的颜色数量
  • clip:可选,如果clip为True,超出范围的值在边界[0]以下映射为0,在边界[0]以上映射为ncolors -1。如果clip为False,超出范围的值如果低于边界[0]则映射为-1,如果高于边界[-1]则映射为ncolors。

各种颜色的名称:官网[2]

b45f92787665209d659c0a5060e32ec5.png

各种调色板:官网[3]

f04a7385e18711ddc324505c9ea2e370.png

接下来准备绘制二维数组,首先是生成10*10的[0,3]的随机数组,然后设定颜色列表以及颜色边界值,最后绘制数组:

from random import randint
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, BoundaryNorm
import numpy as np

data_list = []
for i in range(100):
    data_list.append(randint(0, 3))

data_arr = np.array(data_list).reshape(10, 10)

cmap = ListedColormap(['r', 'g', 'b', 'orange'])
norm = BoundaryNorm([0,1,2,3], cmap.N)

fig, ax = plt.subplots()
im = ax.imshow(data_arr, cmap=cmap, interpolation='none', norm=norm) #
plt.colorbar(mappable=im)

# 添加数值
for i in range(10):
    for j in range(10):
        text = ax.text(j, i, data_arr[i, j], ha='center', va='center', color='w')

结果如下图所示,可以看到2和3共用了一个颜色:

8ff2fddded935dc63eed68e9c3d6b761.png

我们调节BoundaryNorm的值,因为是整数,所以边界可以用小数表示,同时添加一个下界-1:

cmap = ListedColormap(['r', 'g', 'b', 'orange'])
norm = BoundaryNorm([-1,0.1, 1.1, 2.1, 3.1], cmap.N)

结果如下图所示,可以看到2和3被分开了:

2f95ca619c13547bde0002a77caafc57.png

参考资料

[1]

ListedColormap/BoundaryNorm: https://matplotlib.org/api/colors_api.html

[2]

color: https://xkcd.com/color/rgb/

[3]

colormap: https://matplotlib.org/tutorials/colors/colormaps.html

f3f81731c98391fa1910cad9b437b30f.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值