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

本文介绍了在Python中如何根据二维数组的值为每个元素分配不同的颜色。通过使用`ListedColormap`和`BoundaryNorm`函数,可以实现基于值的彩色映射。示例展示了如何为0、1、2和3四个整数值设置颜色,并调整边界以避免值之间的颜色混淆。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值