<分区>
如何创建映射 0
的 matplotlib 颜色图(并且仅 0
)为白色,以及任何其他值 0 < v <= 1
到平滑的渐变,例如 rainbow
?
似乎都不是LinearSegmentedColormap
也不ListedColormap
可以做到这一点。
标签 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()
但是,如果 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()
关于python - 如何创建专门处理一个值的 matplotlib 颜色图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25432654/