0

我有一个正在绘制的二维数组,我imshow想根据数组中每个像素的值来设置颜色。我会用一个例子来解释它。

from pylab import *
from numpy import *

img = ones((5,5))
img[1][1] = 2

imshow(img,interpolation='nearest');colorbar()

如果您运行此代码,您会看到蓝色背景中的红色方块。红色方块对应 中的像素[1][1]img而另一个像素为蓝色,因为它们的值为 1。如果我希望红色方块使用自定义颜色着色怎么办?或者更一般地说,如果我有一个像img示例中那样的二维数组,我如何用我可以选择的颜色为具有相同值的像素着色。

我发现这个页面解释了如何生成自定义颜色条,但这没有用:http ://www.scipy.org/Cookbook/Matplotlib/Show_colormaps

4

1 回答 1

3

您发送的该链接具有以下内容:

但是,如果我认为这些颜色图很难看怎么办?好吧,只需使用 matplotlib.colors.LinearSegmentedColormap 自己制作。首先,创建一个脚本,将范围 (0,1) 映射到 RGB 光谱中的值。在这本字典中,您将有一系列元组,用于每种颜色“红色”、“绿色”和“蓝色”。每个颜色系列中的第一个元素需要从 0 到 1 排序,中间有任意间距。现在,考虑下面“红色”系列中​​的 (0.5, 1.0, 0.7)。该元组表示,在 (0,1) 范围内的 0.5 处,从下到 1.0 进行插值,从 0.7 开始插值。通常,每个元组中的后两个值是相同的,但使用不同的值有助于在颜色图中放置中断。这比听起来更容易理解,正如这个简单的脚本所示:

   1 from pylab import *
   2 cdict = {'red': ((0.0, 0.0, 0.0),
   3                  (0.5, 1.0, 0.7),
   4                  (1.0, 1.0, 1.0)),
   5          'green': ((0.0, 0.0, 0.0),
   6                    (0.5, 1.0, 0.0),
   7                    (1.0, 1.0, 1.0)),
   8          'blue': ((0.0, 0.0, 0.0),
   9                   (0.5, 1.0, 0.0),
  10                   (1.0, 0.5, 1.0))}
  11 my_cmap = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256)
  12 pcolor(rand(10,10),cmap=my_cmap)
  13 colorbar()

这不正是你想要的吗?

这是如何使用您提供的图像执行此操作的示例:

import matplotlib
from matplotlib import pyplot as plt
from pylab import *

img = ones((5,5))
img[1][1] = 2

cdict = {'red': ((0.0, 0.0, 0.0),
                (0.5, 1.0, 0.7),
                     (1.0, 1.0, 1.0)),
             'green': ((0.0, 0.0, 0.0),
                       (0.5, 1.0, 0.0),
                       (1.0, 1.0, 1.0)),
             'blue': ((0.0, 0.0, 0.0),
                      (0.5, 1.0, 0.0),
                     (1.0, 0.5, 1.0))}

my_cmap = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256)
plt.pcolor(img,cmap=my_cmap)
plt.colorbar()
plt.show()

此外,如果您真的想将数字映射到颜色,则可以使用您链接到的示例中指定的离散 cmap,这是 scipy 文档提供的示例方法:

def discrete_cmap(N=8):
    """create a colormap with N (N<15) discrete colors and register it"""
    # define individual colors as hex values
    cpool = [ '#bd2309', '#bbb12d', '#1480fa', '#14fa2f', '#000000',
              '#faf214', '#2edfea', '#ea2ec4', '#ea2e40', '#cdcdcd',
              '#577a4d', '#2e46c0', '#f59422', '#219774', '#8086d9' ]
    cmap3 = col.ListedColormap(cpool[0:N], 'indexed')
    cm.register_cmap(cmap=cmap3)
于 2012-08-22T12:42:11.787 回答