我想使用imshow()创建一个绘图,但是使用一个小的自定义颜色贴图。对于正值,我想使用e.q. " gnuplot的" colors和#34;酷"。知道怎么做吗?
答案 0 :(得分:1)
您可以使用
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.min()
为正数,则使用data
代替vmin
。我们需要np.nextafter
对于要正确构造的自定义色彩映射是否定的。 vmin
稍微调整data
,以便级别将封装所有值
np.nextafter
。如果没有imshow
,data
vmax
时会出现一个大的白色区块
等于vmin
。
颜色栏级别从0
到0
(不包括),然后vmax
(包括)
到N
。
颜色条颜色是从cool
采样的N
颜色的串联,
然后是从gnuplot
采样的N
颜色。您可以更改'.source.coffee':
'For-Loop':
'prefix': 'fori'
'body': 'for (int ${1:i} = $2; ${1:i} < $3; ${1:i}++) {\n\t$4\n}'
以控制您希望拥有的每个底层色彩图的色彩等级。