我想将两个色图合并为一个,这样我可以使用一个cmap
作为负值,另一个作为正值。
目前我使用蒙面数组并使用一个cmap
绘制一个图像而另一个使用另一个图像绘制图像,结果:
包含以下数据
dat = np.random.rand(10,10) * 2 - 1
pos = np.ma.masked_array(dat, dat<0)
neg = np.ma.masked_array(dat, dat>=0)
我使用pos
和gist_heat_r
neg
制作binary
。
我希望只有一个带有cmap
组合的颜色条,所以这对我来说不是正确的方法。
那么,如何将两个现有的cmaps
&#39并合并为一个?
答案 0 :(得分:13)
Colormaps基本上只是您可以调用的插值函数。它们将区间[0,1]中的值映射到颜色。因此,您只需从两个地图中采样颜色,然后将它们组合起来:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
data = np.random.rand(10,10) * 2 - 1
# sample the colormaps that you want to use. Use 128 from each so we get 256
# colors in total
colors1 = plt.cm.binary(np.linspace(0., 1, 128))
colors2 = plt.cm.gist_heat_r(np.linspace(0, 1, 128))
# combine them and build a new colormap
colors = np.vstack((colors1, colors2))
mymap = mcolors.LinearSegmentedColormap.from_list('my_colormap', colors)
plt.pcolor(data, cmap=mymap)
plt.colorbar()
plt.show()
结果:
注意:我知道您可能对此有特殊需求,但我认为这不是一个好方法:您如何区分-0.1与0.9? -0.9从0.1?
防止这种情况的一种方法是仅从~0.2到~0.8(例如:colors1 = plt.cm.binary(np.linspace(0.2, 0.8, 128))
)对地图进行采样,这样它们就不会一直变为黑色: