lin*_*sab 6 python matplotlib colorbar
我正在尝试使用代表颜色值的颜色条来绘制 RGBA 图像。
RGBA 图像是根据原始数据生成的,根据颜色输入将 2d 数据数组转换为具有 x、y、[R、G、B 和 A] 的 6d 数组。例如,“绿色”将使其仅用 2d 数组中的值填充 G 通道,留下 R 和 B = 0 且 A = 255。如下所示:

我发现的所有解决方案都会应用颜色图或限制颜色条的 vmin 和 vmax,但我需要的是一个从漆黑到图像中最亮颜色的颜色条。例如,如果我有一张紫色色调的图像,则颜色条应从 0 变为“全”紫色,其中仅包含紫色色调。我发现的最接近的解决方案是这个(https://pelson.github.io/2013/working_with_colors_in_matplotlib/),但它不适合“通用”解决方案。
下面给出了我得到的图像。

import numpy as np
from ImgMath import colorize
import matplotlib.pyplot as plt
import Mapping
data = Mapping.getpeakmap('Au')
# data shape is (10,13) and len(data) is 10
norm_data = data/data.max()*255
color_data = colorize(norm_data,'green')
# color_data shape is (10,13,4) and len(color_data) is 10
fig, ax = plt.subplots()
im = plt.imshow(color_data)
fig.colorbar(im)
plt.show()
Run Code Online (Sandbox Code Playgroud)
您可以使用自定义的全绿色颜色图来映射您的数据
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
# input 2D array
data = np.random.randint(0,255, size=(10,13))
z = np.zeros(256)
colors = np.linspace(0,1,256)
alpha = np.ones(256)
#create colormap
greencolors = np.c_[z,colors,z,alpha]
cmap = ListedColormap(greencolors)
im = plt.imshow(data/255., cmap=cmap, vmin=0, vmax=1)
plt.colorbar(im)
plt.show()
Run Code Online (Sandbox Code Playgroud)