gpt4 book ai didi

python - 具有离散颜色的 2D 数组不适用于一个中间值

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:32 26 4
gpt4 key购买 nike

我有一个值在 0 到(包括)22 之间的二维数组。我希望每个值在普通 matshow 图中都分配有离散颜色和悬停值。我仅使用颜色图和标准化进行了尝试,但颜色 15 和 16 不一致。

没有任何标准化,15 的颜色为 16(当然,悬停值是未对齐的 float )。通过标准化,一切都很好,除了 16 的颜色为 15。

我看到多个其他问题提出同样的问题,但遵循答案导致了这个问题。

import matplotlib.pyplot as plt
import matplotlib.colors as colors

example_data = [list(range(23))]*4
cmaplist = [
"#b3b3b3", "#333333", "#8a745c", "#8f7456",
"#847362", "#1a53ff", "#336600", "#aa8a31",
"#b3b3b3", "#aa8a31", "#aa8a31", "#004d00",
"#aa8a31", "#5c330a", "#999999", "#66d9ff",
"#e481a2", "#e996b1", "#e481a2", "#e06c92",
"#e87da1", "#fff11c", "#ff6600"
]
norm = colors.BoundaryNorm(range(len(cmaplist)+1), len(cmaplist))
cmap = colors.LinearSegmentedColormap.from_list('mycmap', cmaplist, len(cmaplist))

plt.matshow(example_data, fignum=False, cmap=cmap, norm=norm)
plt.show()

我不太擅长 matplotlib 等,所以这可能是一个非常明显的错误。我将其视为只是对数据进行简单的值查找,但我知道这并不是它实际的工作原理,但以我有限的知识,我想不出更好的方法。

最佳答案

首先尝试创建 MCVE:

import matplotlib.pyplot as plt
import matplotlib.colors as colors
import numpy as np

example_data = np.array([list(range(20))]*4)
cmaplist = ["red", "limegreen", "blue", "gold"]*5

fig, ax = plt.subplots()

norm = colors.BoundaryNorm(np.arange(0,len(cmaplist)+1)-0.5, len(cmaplist))
cmap = colors.LinearSegmentedColormap.from_list('mycmap',cmaplist, len(cmaplist))

im = ax.matshow(example_data, cmap=cmap, norm=norm)

plt.show()

enter image description here

可以看出,位置14和位置15的颜色是相同的,而位置15应该是黄色。这是 matplotlib 2.1 中存在的问题,在 matplotlib 2.0.2 中似乎不存在该问题。于是我开了一个bug report关于它。

解决方案:

您正在映射的数字(此处为整数)正好位于边界的边缘。我不太确定这里出了什么问题,但为了保存,您可以使用两个整数之间的中间作为边界,即

norm = colors.BoundaryNorm(np.arange(0,len(cmaplist)+1)-0.5, len(cmaplist))

Complete example:

import matplotlib.pyplot as plt
import matplotlib.colors as colors
import numpy as np

example_data = np.array([list(range(20))]*4)
cmaplist = ["red", "limegreen", "blue", "gold"]*5

fig, ax = plt.subplots()

norm = colors.BoundaryNorm(np.arange(0,len(cmaplist)+1)-0.5, len(cmaplist))
cmap = colors.LinearSegmentedColormap.from_list('mycmap',cmaplist, len(cmaplist))

im = ax.matshow(example_data, cmap=cmap, norm=norm)

plt.show()

enter image description here

关于python - 具有离散颜色的 2D 数组不适用于一个中间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com