【发布时间】:2015-05-06 16:15:01
【问题描述】:
我想使用 imshow() 进行绘图,但需要使用一些自定义颜色图。对于正值,我想使用 e.q. “gnuplot”colors 和消极的“酷”。知道怎么做吗?
【问题讨论】:
-
另见stackoverflow.com/questions/16834861/…——注意注册颜色图,这可能只在 cmets 中提及。
标签: python matplotlib
我想使用 imshow() 进行绘图,但需要使用一些自定义颜色图。对于正值,我想使用 e.q. “gnuplot”colors 和消极的“酷”。知道怎么做吗?
【问题讨论】:
标签: python matplotlib
你可以使用
cmap, norm = mcolors.from_levels_and_colors(levels, colors)
例如,
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
data = np.linspace(-10,5,20).reshape(5,4)
cmap = {name:plt.get_cmap(name) for name in ('gnuplot', 'cool')}
N = 50
vmin, vmax = (np.nextafter(min(data.min(), -1), -np.inf),
np.nextafter(max(data.max(), 1), np.inf)) # 1
levels = np.concatenate([np.linspace(vmin, 0, N, endpoint=False),
np.linspace(0, vmax, N+1, endpoint=True)]) # 2
colors = np.concatenate([cmap[name](np.linspace(0, 1, N))
for name in ('cool', 'gnuplot')]) # 3
cmap, norm = mcolors.from_levels_and_colors(levels, colors)
plt.imshow(data, cmap=cmap,
norm=norm,
interpolation='nearest')
bar = plt.colorbar()
plt.show()
产量
我希望vmin, vmax 的定义可以更简单。 min(data.min(), -1)
在data 为正的情况下使用而不是data.min()。我们需要vmin
为正确构造自定义颜色图的负数。 np.nextafter
将vmin 向下轻推一点,以便关卡将所有值封装在
data。没有np.nextafter,imshow有一个大白块当data
等于vmax。
颜色条级别从vmin 到0(不包括),然后是0(包括)
到vmax。
颜色条颜色是从cool 采样的N 颜色的串联,
然后是从gnuplot 采样的N 颜色。您可以更改 N 以控制您希望拥有的每个基础颜色图中的颜色渐变数量。
【讨论】: