我想绘制二进制数组(用零或一填充)。我正在使用默认的颜色图 viridis,所以我希望全零数组都是紫色,全一数组都是黄色,但是每次数组在任何地方都有相同的值(只有 1 或只有 0),它看起来全是紫色的。如何“修复”颜色图,使“1”显示为黄色,“0”显示为紫色,独立于数组的其余部分?
我尝试使用以下行“二值化”颜色图: new_colormap = mpl.colormaps['viridis'].resampled(2) 但这并没有改变任何事情
您需要为颜色图设置明确的颜色范围。这可以确保特定值一致地映射到相同的颜色,无论数组中的数据范围如何。
以下是实现此目标的方法:
导入必要的库:
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
创建具有固定边界的颜色图:
# Define boundaries for your colormap
boundaries = [0, 0.5, 1]
# Create a colormap that is fixed from 0 to 1, with 0 mapped to the first color of 'viridis'
# and 1 mapped to the last color of 'viridis'
fixed_cmap = plt.cm.colors.ListedColormap(
[plt.cm.viridis.colors[0], plt.cm.viridis.colors[-1]], 'indexed', len(boundaries) - 1
)
# Create a Normalize object which will scale data between 0 to 1
norm = mcolors.BoundaryNorm(boundaries, fixed_cmap.N, clip=True)
Use this colormap and norm in your plot:
# Example binary data
data = [[1, 1, 0, 0], [0, 0, 1, 1]]
plt.imshow(data, cmap=fixed_cmap, norm=norm)
plt.colorbar()
plt.show()
此代码设置一个只有两种颜色的颜色图:“viridis”颜色图的第一个和最后一个颜色,分别对应于值 0 和 1。 BoundaryNorm 对象确保这些颜色用于指定边界内的值(第一种颜色为 0 到 0.5,第二种颜色为 0.5 到 1)。
当您使用此设置绘制二进制数组时,无论数组的整体数据组成如何,零都应显示为紫色(“viridis”中的第一种颜色),零应显示为黄色(“viridis”中的最后一种颜色)。