我使用了一个色条工具,并且需要改变沿Y轴的任意范围的不透明度,而不是让不透明度值与 colored颜色 本身相关联.
在阅读SO和各种在线教程中的其他帖子时,我偶然看到一些帖子显示pColoresh、facecolor、edgecolor或在RGB colored颜色 定义中添加alpha值作为第四列,但它们都没有真正解决问题.
如果您运行下面的最小示例代码(使用之前来自SO的帮助,我很感激),您将看到由每种 colored颜色 定义的不透明度:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
XMIN = 0.0
XMAX = 1.0
YMIN = 1000.0
YMAX = 2000.0
RATIO = 5.0
NUM_COLORS = 256
color_list = ([0.2, 0.88, 0.3, 0.25], [0.33, 1.0, 0.25, 0.15], [0.7, 0.2, 0.5, 1.0], [0.0, 0.34, 0.2, 0.1], [0.5, 0.9, 0.1, 1.0]) # RGBA, 0 to 1 plus opacity
bounds = [YMIN, 1100.0, 1400.0, 1800.0, YMAX]
color_tuples = [(i, color) for i, color in zip(np.interp(bounds, [bounds[0], bounds[-1]], [0, 1]), color_list)]
fig, ax = plt.subplots(1, 1, figsize = (4, 10), num = "Variable opacity by Y?")
segm_cmap = mpl.colors.LinearSegmentedColormap.from_list("Segm_cmap", color_tuples, N = NUM_COLORS)
norm = plt.Normalize(vmin = bounds[0], vmax = bounds[-1])
img = ax.imshow(np.linspace(YMIN, YMAX, NUM_COLORS).reshape(-1, 1), cmap = segm_cmap, norm = norm, interpolation = "bilinear",
origin = "lower", extent = [XMIN, XMAX, YMIN, YMAX])
ax.set_aspect((XMAX - XMIN) / (YMAX - YMIN) * RATIO)
plt.show()
然而,就像"bound"列表定义的 colored颜色 边界/渐变一样,我认为可以用x,y对和各自的不透明度创建一个类似的元组,并将其作为"pha"传递给imshow(),因为Matplotlib文档表明它接受2D数组等.类似于:
opacities = ([[XMIN to XMAX, YMIN to 1200], 1.0], [[XMIN to XMAX, 1200.1 to 1500], 0.5], [[XMIN to XMAX, 1500.1 to YMAX], 0.1])
img = ax.imshow(....., alpha = opacities)
即X范围、Y范围和不透明度值.但我无论如何也无法让它工作,我也找不到几个样例代码来指导我.所以我说,"为了正义,我必须go 找唐·科尔……",我的意思是,如果可能的话,我必须向聪明人寻求建议.供您参考,我有Python3.10.12和Matplotlib 3.5.1(Ubuntu 22.04,如果相关).