如何修复颜色图以使其不是相对的?

问题描述 投票:0回答:1

我想绘制二进制数组(用零或一填充)。我正在使用默认的颜色图 viridis,所以我希望全零数组都是紫色,全一数组都是黄色,但是每次数组在任何地方都有相同的值(只有 1 或只有 0),它看起来全是紫色的。如何“修复”颜色图,使“1”显示为黄色,“0”显示为紫色,独立于数组的其余部分?

我尝试使用以下行“二值化”颜色图: new_colormap = mpl.colormaps['viridis'].resampled(2) 但这并没有改变任何事情

numpy-ndarray colormap
1个回答
0
投票

您需要为颜色图设置明确的颜色范围。这可以确保特定值一致地映射到相同的颜色,无论数组中的数据范围如何。

以下是实现此目标的方法:

导入必要的库:

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”中的最后一种颜色)。

© www.soinside.com 2019 - 2024. All rights reserved.