【发布时间】:2013-12-12 08:28:35
【问题描述】:
我正在用 imshow 绘制一个 2D 标量场,我想清楚地对比负值和正值。有没有办法实现由其他两个组成的颜色图(例如,jet,例如,hot 为正,cool 为负)?
【问题讨论】:
标签: colors matplotlib plot
我正在用 imshow 绘制一个 2D 标量场,我想清楚地对比负值和正值。有没有办法实现由其他两个组成的颜色图(例如,jet,例如,hot 为正,cool 为负)?
【问题讨论】:
标签: colors matplotlib plot
您可以从现有的 cmap 中读取颜色并添加它们,这相当简单,但缺点也很少。如果原始颜色图具有不同数量的颜色,则两者的“边缘”都不会居中。
如果它们确实具有相同的数字,则生成的 cmap 将是对称的,但只有当正值等于负值时,“边缘”才会为零,例如 -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”,它有一个非常好的使用颜色图的实现。它针对的是卫星图像,但颜色图部分当然适用于任何类型的图像。
【讨论】: