python - 如何创建专门处理一个值的 matplotlib 颜色图?

标签 python matplotlib

<分区>

如何创建映射 0 的 matplotlib 颜色图(并且 0 )为白色,以及任何其他值 0 < v <= 1到平滑的渐变,例如 rainbow

似乎都不是LinearSegmentedColormap也不ListedColormap可以做到这一点。

最佳答案

有几种方法可以做到这一点。根据您对值范围的描述,您只想使用 cmap.set_under('white') 然后将 vmin 设置为 0 + eps.

例如:

import matplotlib.pyplot as plt
import numpy as np

cmap = plt.get_cmap('rainbow')
cmap.set_under('white')  # Color for values less than vmin

data = np.random.random((10, 10))
data[3:5, 7:] = 0

# Very small float such that 0.0 != 0 + eps
eps = np.spacing(0.0)

fig, ax = plt.subplots()
im = ax.imshow(data, interpolation='nearest', vmin=eps, cmap=cmap)
fig.colorbar(im, extend='min')
plt.show()

enter image description here

但是,如果 0 在数据范围的中间,您可以屏蔽这些值并使用 cmap.set_bad 设置颜色(我将使用黑色作为颜色以区别于默认值用于屏蔽部分。):

import matplotlib.pyplot as plt
import numpy as np

cmap = plt.get_cmap('rainbow')
cmap.set_bad('black')

data = np.random.normal(0, 1, (10, 10))
data[3:5, 7:] = 0

data = np.ma.masked_equal(data, 0)

fig, ax = plt.subplots()
im = ax.imshow(data, interpolation='nearest', cmap=cmap)
fig.colorbar(im)
plt.show()

enter image description here

关于python - 如何创建专门处理一个值的 matplotlib 颜色图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25432654/

相关文章:

python - 在python中绘制具有不同背景颜色的曲线

python : How to fix for loop stop?

python - 在 lambda 中使用 print

python - 如何使用python将二进制转换为十进制而不使用bin函数

python - Matplotlib 找不到 Facefile,正在使用旧的 Python 解释器位置

python - 如何在 Matplotlib 中设置补丁的边色和面色的不同不透明度

python - 更改 Seaborn 热图中缺失值的颜色

python - 在 Pyplot 中,一旦绘图已经绘制完成,我们如何更改绘图的线宽?

python - Windows 与 Python Hook

python - 计算列表中的项目并使其成为字典