如何使用matplotlib定义具有绝对值的colormap

时间:2015-09-24 19:46:55

标签: python matplotlib plot colormap absolute-value

我使用以下脚本进行绘图:

import matplotlib

import matplotlib.pyplot as plt
import numpy as np
import pylab as pl
import math
import matplotlib as mpl
from matplotlib.ticker import MultipleLocator
from matplotlib.colors import LinearSegmentedColormap

cdict1 = {'red':   ((0.0, 1.0, 1.0),
                   (0.4, 1.0, 1.0),
                   (0.7, 0.0, 0.0),
                   (1.0, 0.0, 0.0)),

         'green': ((0.0, 1.0, 1.0),
                   (0.1, 0.0, 0.0),
                   (1.0, 0.0, 0.0)),

         'blue':   ((0.0, 1.0, 1.0),
                   (0.1, 0.0, 0.0),
                   (0.4, 0.0, 0.0),
                   (1.0, 1.0, 1.0))
        }

white_blue_red = LinearSegmentedColormap('WhiteBlueRed', cdict1)
plt.register_cmap(cmap=white_blue_red)

x = np.loadtxt('data.dat',
                 unpack=True)

plt.scatter(x[0], x[1], marker='.', s=3, linewidths=0, c=x[3], cmap= \
            plt.get_cmap('WhiteBlueRed')) # plt.cm.bwr  
plt.colorbar()

plt.show()

我定义的色彩映射使用相对值(函数1最大值的0最小值)。问题是我想使用该代码绘制数百个不同的文件,我希望每个绘图具有完全相同的色彩映射。是否有可能用绝对值定义色彩图?这将解决我的问题。

1 个答案:

答案 0 :(得分:9)

在这种情况下,关键是String pattern = "\\{.+?}"; // Note that `.+?` requires at least 1 character, // Use .*? to allow 0 characters ,而不是色彩图。

colormap定义已缩放数据的颜色。 norm将数据缩放到0-1范围。

默认情况下,会创建一个norm实例,可以在数据 Normalizevmin kwargs的最小值和最大值之间进行缩放提供。

但是,有一些不同的辅助函数可能对您的情况有用。

如果你想要一个离散的颜色条,有一个辅助函数可以为你生成vmaxnormcmap它需要一个值列表和一个颜色列表并返回matplotlib.colors.from_levels_and_colors实例和BoundaryNorm实例:

例如:

LinearSegmentedColormap

enter image description here

请注意,这会创建一个离散的色彩映射。

如果我们想要使用连续色图,我们可以指定相同的import numpy as np import matplotlib.pyplot as plt import matplotlib.colors data1 = 3 * np.random.random((10, 10)) data2 = 5 * np.random.random((10, 10)) levels = [0, 1, 2, 3, 4, 5] colors = ['red', 'brown', 'yellow', 'green', 'blue'] cmap, norm = matplotlib.colors.from_levels_and_colors(levels, colors) fig, axes = plt.subplots(ncols=2) for ax, dat in zip(axes, [data1, data2]): im = ax.imshow(dat, cmap=cmap, norm=norm, interpolation='none') fig.colorbar(im, ax=ax, orientation='horizontal') plt.show() vmin参数,也可以创建我们自己的vmax实例并将其作为{{1所有图像的参数。

此外,还有一个类似的功能,可以从颜色列表中创建连续的色彩映射:

Normalize

enter image description here