我正在用imshow绘制一个2D标量场,我想清楚地对比正面的负值。有没有办法实现由另外两个组成的色彩图(例如喷射,hot
为正,cool
为负)?
答案 0 :(得分:3)
您可以从现有的cmaps中读取颜色并添加它们,这很简单,但缺点很少。如果原始色彩图具有不同数量的颜色,则两者的“边缘”将不会居中。
如果它们具有相同的数字,则得到的cmap将是对称的,但如果正值等于负值,则'edge'将仅为零,例如-2& 2或-4& 4,等等。
这可以这样做:
import matplotlib.pyplot as plt
import numpy as np
cool = plt.cm.cool
hot = plt.cm.hot
cool_vals = [cool(i) for i in range(cool.N)]
hot_vals = [hot(i) for i in range(hot.N)]
comb_vals = cool_vals + hot_vals
# random hue with constant sat and value
new_cmap = matplotlib.colors.ListedColormap(comb_vals)
plt.imshow(np.arange(20*20).reshape(20,20)-199., interpolation='none', cmap=new_cmap)
plt.colorbar()
我不知道Matplotlib中非常奇特的方法。有一个全新的Python模块“TrollImage”,它具有使用色彩映射的非常好的实现。它的目标是卫星图像,但色彩图部分当然适用于任何类型的图像。