在 imshow 中加入两个颜色图
Join two colormaps in imshow
我想使用 imshow() 绘制图形,但要使用一些自定义颜色图。对于正值,我想使用 e.q。 "gnuplot" colors 和负值 "cool"。知道怎么做吗?
你可以使用
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
以控制您希望从每个基础颜色图中获得多少个颜色等级。
我想使用 imshow() 绘制图形,但要使用一些自定义颜色图。对于正值,我想使用 e.q。 "gnuplot" colors 和负值 "cool"。知道怎么做吗?
你可以使用
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
以控制您希望从每个基础颜色图中获得多少个颜色等级。