1、创建不连续色系
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
# 定义颜色的RGB值
colors = [(0.2, 0.4, 0.6), # 蓝色
(0.8, 0.1, 0.3), # 红色
(0.5, 0.7, 0.2),
(0.3,0.5,0.8)] # 绿色
# 创建色系
cmap = ListedColormap(colors)
# 绘制色系
plt.imshow([range(10)], cmap=cmap, aspect='auto')
plt.show()
2、创建连续色系
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
# 定义颜色的RGB值
colors = [(0.2, 0.4, 0.6), # 蓝色
(0.8, 0.1, 0.3), # 红色
(0.5, 0.7, 0.2),
(0.3,0.5,0.8)] # 绿色
# 创建颜色映射
cmap = LinearSegmentedColormap.from_list('CustomCmap', colors, N=100)
# 绘制色系
plt.imshow([range(100)], cmap=cmap, aspect='auto')
plt.colorbar()
plt.show()
3、保存这个色系为 json 文件
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import json
# 定义颜色的RGB值
colors = [(0.2, 0.4, 0.6), # 蓝色
(0.8, 0.1, 0.3), # 红色
(0.5, 0.7, 0.2),
(0.3,0.5,0.8)] # 绿色
# 创建颜色映射
cmap = LinearSegmentedColormap.from_list('CustomCmap', colors, N=100)
# 保存颜色映射数据到文件
cmap_data = cmap._segmentdata
with open('custom_cmap.json', 'w') as file:
json.dump(cmap_data, file)
# 在其他程序中加载颜色映射数据并使用
with open('custom_cmap.json', 'r') as file:
cmap_data = json.load(file)
cmap = LinearSegmentedColormap('custom_cmap', cmap_data)
# 绘制色系
plt.imshow(np.random.rand(10, 10), cmap=cmap)
plt.colorbar()
plt.show()
4、获取色系rgb值
from matplotlib.colors import LinearSegmentedColormap
# 定义颜色的RGB值
colors = [(0.2, 0.4, 0.6), # 蓝色
(0.8, 0.1, 0.3), # 红色
(0.5, 0.7, 0.2),
(0.3,0.5,0.8)] # 绿色
# 创建颜色映射
cmap = LinearSegmentedColormap.from_list('CustomCmap', colors, N=100)
# 获取颜色映射的数据
cmap_data = cmap._segmentdata
print(cmap_data)
5、修改plt内置色系或增加色系
我们找到plt相应的色系文件:
matpltlib的颜色表数据在 _cm.py 文件里(D:\Anaconda3\Lib\site-packages\matplotlib)
打开_cm.py 文件,滑倒最后,我们会看到各色系的名字。
根据该格式,我们创建相应的颜色进行配置即可。
其他:
6、根据系统色系按等间距取一定数量的颜色
下面是用于color的:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
# 定义颜色映射
cmap = plt.cm.get_cmap('nipy_spectral')
# 指定颜色个数
num_colors = 10
# 根据颜色个数生成等间距的值
cmap_values = np.linspace(0, 1, num_colors)
# 根据颜色映射生成颜色列表
colors = cmap(cmap_values)
# 这里获得的是四个列,分别是:红色(R)、绿色(G)、蓝色(B)和透明度(A)通道的值
# 可视化颜色
plt.subplot(2, 1, 1) # 全部显示
plt.bar(range(num_colors), [1]*num_colors, color=colors)
plt.title('all')
# 根据颜色映射生成颜色列表
colors = cmap(cmap_values)[:5]
plt.subplot(2, 1, 2) # 只显示无个颜色
plt.bar(range(num_colors), [1]*num_colors, color=colors)
plt.title('non-all')
plt.show()
如果是cmap的:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
# 定义颜色映射
cmap = plt.cm.get_cmap('nipy_spectral')
# 指定颜色个数
num_colors = 10
# 根据颜色个数生成等间距的值
cmap_values = np.linspace(0, 1, num_colors)
# 根据颜色映射生成颜色列表
colors = cmap(cmap_values)
cmaps = ListedColormap(colors)
# 可视化颜色
plt.subplot(3, 1, 1) # 全部显示
plt.bar(range(num_colors), [1] * num_colors, color=colors)
plt.title('all')
# 根据颜色映射生成颜色列表
plt.subplot(3, 1, 2) # 只显示无个颜色
plt.imshow([range(10)], cmap=cmaps)
plt.title('all')
# 根据颜色映射生成颜色列表
colors = cmap(cmap_values)[:5]
cmaps = ListedColormap(colors)
plt.subplot(3, 1, 3) # 只显示无个颜色
plt.imshow([range(5)], cmap=cmaps)
plt.title('non-all')
plt.show()
or:
import matplotlib.pyplot as plt
# 指定颜色个数
num_colors = 10
# 定义颜色映射
cmap = plt.cm.get_cmap('nipy_spectral', num_colors)
# 根据颜色映射生成颜色列表
plt.imshow([range(10)], cmap=cmap)
plt.title('non-all')
plt.show()
官方色系查询:Choosing Colormaps in Matplotlib — Matplotlib 3.8.3 documentation