【问题标题】:Join two colormaps in imshow在 imshow 中加入两个颜色图
【发布时间】:2015-05-06 16:15:01
【问题描述】:

我想使用 imshow() 进行绘图,但需要使用一些自定义颜色图。对于正值,我想使用 e.q. “gnuplot”colors 和消极的“酷”。知道怎么做吗?

【问题讨论】:

标签: python matplotlib


【解决方案1】:

你可以使用

cmap, norm = mcolors.from_levels_and_colors(levels, colors)

construct a custom colormap


例如,

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()

产量


  1. 我希望vmin, vmax 的定义可以更简单。 min(data.min(), -1)data 为正的情况下使用而不是data.min()。我们需要vmin 为正确构造自定义颜色图的负数。 np.nextaftervmin 向下轻推一点,以便关卡将所有值封装在 data。没有np.nextafterimshow有一个大白块当data 等于vmax

  2. 颜色条级别从vmin0(不包括),然后是0(包括) 到vmax

  3. 颜色条颜色是从cool 采样的N 颜色的串联, 然后是从gnuplot 采样的N 颜色。您可以更改 N 以控制您希望拥有的每个基础颜色图中的颜色渐变数量。

【讨论】:

    猜你喜欢
    • 2014-04-03
    • 2012-08-11
    • 2021-06-20
    • 2015-12-22
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    相关资源
    最近更新 更多