如何创建一个matplotlib色彩映射,将0(并且仅 0)映射到白色,将任何其他值映射0 < v <= 1到平滑渐变,例如rainbow?
它似乎既不能LinearSegmentedColormap也ListedColormap不能做到这一点.
Joe*_*ton 14
有几种方法可以做到这一点.根据您对值范围的描述,您只想使用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()
Run Code Online (Sandbox Code Playgroud)

但是,如果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()
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |