根据RGBA图像通道向matplotlib颜色条添加色阶

6
我正在尝试绘制一个带有表示颜色值的色条的RGBA图像。
RGBA图像由原始数据生成,将2D数据数组转换为6D数组,其中包括x,y,[R,G,B和A]。根据颜色输入,例如“绿色”,它将仅使用2D数组中的值填充G通道,使R和B = 0且A = 255。就像这样:

data_to_color_equation

我发现的所有解决方案都会应用颜色映射或限制颜色条的vmin和vmax,但我需要的是一个颜色条,从暗黑到图像中存在的最亮颜色。例如,如果我有一张紫色调的图片,颜色条应该从0到“完整”的紫色,其中只有紫色调。我找到的最接近的解决方案是这个(https://pelson.github.io/2013/working_with_colors_in_matplotlib/),但它不适用于“通用”解决方案。
下面是我得到的一张图片。

color_data_plot

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()

1
欢迎来到StackOverflow。你的问题非常长,老实说我不确定你的确切问题是什么。虽然广泛的范围通常很有趣,但这个网站真正关注的只是你遇到的具体编程问题。尝试将你的问题简化为这些要点。同时,请确保你的示例是最小完整可验证的 - Tom de Geus
谢谢Tom。我在最后一次编辑中尝试缩小问题范围并使其更加面向编码。 - linssab
这已经好了一些,但仍然无法重现。尝试摆脱非标准的 ImgMathMapping。您可以使用一些虚构的数据代替。 - Tom de Geus
1个回答

4
您可以使用自定义的全绿色色图来映射您的数据。
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()

enter image description here


非常感谢!它起作用了,我成功地创建了其他颜色映射,完美地满足了我的需求。 - linssab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接