在Matplotlib中选择颜色映射#

Matplotlib有许多可通过以下方式访问的内置颜色映射matplotlib.颜色。还有一些外部库有许多额外的彩色地图,可以在第三方彩色地图Matplotlib文档的第节。在这里,我们简要讨论了如何在众多选项中进行选择。对于有关创建自己的颜色贴图的帮助,请参见在Matplotlib中创建颜色映射.

要获取所有已注册颜色贴图的列表,可以执行以下操作:

 马特普洛特利布 进口 彩色地图
列表(彩色地图)

概述#

选择一张好的彩色地图背后的想法是在3D中找到一个好的表现数据集的颜色空间。任何给定数据集的最佳颜色映射取决于包括:

  • 是否表示表单数据或度量数据([仓库])

  • 您对数据集的了解(例如,是否存在临界值其他值会偏离哪个值?)

  • 如果要打印的参数有直观的配色方案

  • 如果现场有标准,观众可能会期待

对于许多应用程序,感知均匀的颜色映射是最佳选择;也就是说,数据中相同步骤被视为相等的颜色图颜色空间中的步骤。研究人员发现人类大脑感知亮度参数随数据变化而变化比方说,色调的改变要好得多。因此,颜色映射其通过色彩图具有单调增加的亮度观众会更好地理解。精彩的例子第三方颜色映射第节。

颜色可以在3D空间中以各种方式表示。一种表示颜色的方法正在使用CIELAB。在CIELAB中,颜色空间由亮度表示,\(L^*\); 红绿色,\(^*\); 和黄蓝色,\(b^*\).轻盈参数\(L^*\)然后可以用来了解更多关于matplotlib如何观众会看到彩色地图。

学习人类对彩色地图的感知的优秀起始资源来自[国际商用机器公司].

颜色贴图类#

颜色映射通常根据其功能分为几个类别(请参见,例如,[莫雷兰]):

  1. 顺序:亮度变化,通常是色彩饱和度增量,通常使用单一色调;应用于表示具有顺序的信息。

  2. 发散:亮度的变化,可能是两个的饱和度不同的颜色在中间以不饱和的颜色相遇;当绘制的信息具有临界值时,应使用中间值,例如地形或数据偏离周围时零。

  3. 循环:两种不同颜色亮度的变化中间和开始/结束的颜色不饱和;应该是用于在端点处换行的值,例如phase角度、风向或一天中的时间。

  4. 定性:通常是杂色;应该习惯表示没有顺序的信息或关系。

 色彩宽敞 进口 cspace_转换器

进口 matplotlib.打印 作为 plt公司
进口 笨蛋 作为 净现值

进口 马特普洛特利布 作为 英里/小时

首先,我们将显示每个颜色贴图的范围。请注意,有些似乎比其他人改变得更快。

计算机辅助程序 = {}

梯度 = 净现值.林斯空间(0, 1, 256)
梯度 = 净现值.vstack(vstack)((梯度, 梯度))


定义 绘图颜色渐变(类别, cmap列表):
    #创建图形并根据颜色贴图的数量调整图形高度
    nrows公司 = 伦恩(cmap列表)
    教法学 = 0.35 + 0.15 + (n行 + (n行 - 1) * 0.1) * 0.22
    无花果, 斧头 = plt公司.次要情节(n行=n行 + 1, 图尺寸=(6.4, 教法学))
    无花果.子程序_调整(顶部=1 - 0.35 / 教法学, 底部=0.15 / 教法学,
                        左边=0.2, 正确的=0.99)
    斧头[0].设置标题(_T)((f)'{类别}颜色映射', 字体大小=14)

    对于 斧头, 名称 在里面 拉链(斧头, cmap列表):
        斧头.显示图像(梯度, 方面=“自动”, cmap公司=英里/小时.彩色地图[名称])
        斧头.文本(-0.01, 0.5, 名称, va公司=“中心”, =“正确”, 字体大小=10,
                转型=斧头.横轴)

    #关闭所有勾选和脊椎,而不仅仅是带有颜色贴图的勾选和脊柱。
    对于 斧头 在里面 斧头:
        斧头.设置_轴_关闭()

    #保存颜色映射列表供以后使用。
    计算机辅助程序[类别] = cmap列表

相继的#

对于顺序图,亮度值通过以下方式单调增加彩色地图。这很好。一些\(L^*\)颜色映射中的值范围从0到100(二进制和其他灰度),其他从0开始\(L^*=20\)。范围较小的\(L^*\)将相应地具有较小的感知范围。还要注意\(L^*\)功能变化在彩色地图中:有些是近似线性的\(L^*\)和其他更加弯曲。

绘图颜色渐变('感知一致序列',
                     [“绿色”, “血浆”, “地狱”, “岩浆”, “雪人”])
感知一致的序列彩色地图
绘图颜色渐变(“顺序”,
                     [“灰色”, “紫色”, “蓝色”, “绿色”, “橘子”, “红色”,
                      “YlOrBr”, “YlOrRd”, “OrRd”, “PuRd”, “RdPu”, “布浦”,
                      “GnBu”, “PuBu”, “YlGnBu”, “PuBuGn”, “错误”, “YlGn”])
顺序彩色贴图

序列2#

许多\(L^*\)序列2图中的值是单调的增加,但有些(秋季、凉爽、春季和冬季)高原,甚至两者兼而有之在中上下移动\(L^*\)空间。其他(afmhot、copper、gist_heat和hot)有扭结\(L^*\)功能。在中表示的数据颜色图中处于平稳或扭结的区域将导致对颜色图中这些值的数据条带(请参见[麦卡塔带]对于一个很好的例子)。

绘图_颜色_半径('顺序(2)',
                     [“二进制”, “gist_yarg”, “gist_gray”, “灰色”, “骨头”,
                      “粉红色”, “弹簧”, “夏天”, “秋天”, “冬天”, “酷”,
                      “Wistia”, “热门”, “afmhot”, “gist_heat”, “铜”])
顺序(2)颜色映射

分散#

对于Diverging映射,我们希望单调递增\(L^*\)最大值,应接近\(L^*=100\),后面是单调递减\(L^*\)值。我们正在寻找大约相等最小值\(L^*\)颜色映射两端的值。通过这些措施、BrBG和RdBu是很好的选择。coolwarm是个不错的选择,但它不涉及广泛的\(L^*\)值(请参阅下面的灰度部分)。

绘图颜色渐变(“分流”,
                     [“PiYG”, “PRGn”, “BrBG”, “PuOr”, “RdGy”, “RdBu”, “RdYlBu”,
                      “RdYlGn”, “光谱”, “冷暖”, “bwr”, “地震”])
多样的颜色映射

循环(Cyclic)#

对于循环贴图,我们希望以相同的颜色开始和结束,并满足对称中心点在中间。\(L^*\)应该单调地改变从开始到中间,从中间到结束。它应该是对称的在增加和减少方面,只有色调不同。在末端和中间,\(L^*\)将反转方向,应在\(L^*\)减少工件的空间。请参见[kovesi-colormaps]了解更多有关循环映射设计的信息。

经常使用的HSV颜色映射包含在这组颜色映射中,尽管它与中心点不对称。此外\(L^*\)值不同在彩色地图中广泛存在,这使得它在表示数据时成为一个糟糕的选择以供观看者感知。有关此想法的扩展,请参阅[mycarta-jet].

绘图颜色渐变(“循环”, [“暮色”, '微光_移动', “hsv”])
循环颜色贴图

定性的#

定性颜色映射的目的不是感知映射,而是观察亮度参数可以为我们验证这一点\(L^*\)值到处移动整个色彩图中的位置,显然不是单调增加的。这些不是用作感知颜色贴图的好选项。

绘图颜色渐变(“定性”,
                     [“Pastel1”, “Pastel2”, “配对”, “强调文字”, “深色2”,
                      “设置1”, '设置2', '设置3', '选项卡10', '选项卡20', '选项卡20b',
                      '标签20c'])
定性颜色图

其他#

一些杂乱的颜色贴图有特殊的用途他们已经被创造出来了。例如,gist_earth、海洋和地形所有这些似乎都是为了绘制地形(绿色/棕色)和水深度(蓝色)在一起。我们预计会在这些方面出现分歧因此,颜色映射可能不太理想,例如地理和地形。创建CMRmap是为了将油井转换为灰度,尽管它看起来有一些小的扭结\(L^*\)cubehelix的设计使其在两种亮度上都能平滑变化和色调,但在绿色色调区域中似乎有一个小凸起。涡轮是为了显示深度和视差数据而创建的。

这组彩色地图中包括了经常使用的喷气式飞机彩色地图。我们可以看到那个\(L^*\)值在整个颜色图中变化很大,使其成为表示数据以供观众直观查看的糟糕选择。查看对这个想法的扩展[mycarta-jet][涡轮].

绘图颜色渐变(“其他”,
                     ['标志', “棱镜”, “海洋”, “gist_earth”, “地形”,
                      'gist_stern', “gnuplot”, “gnuplot2”, “CMR映射”,
                      “cubehelix”, “brg”, '注册主弓', “彩虹”, “喷气式飞机”,
                      “涡轮”, “nipy_spectric”, 'gist_ncar'])

plt公司.显示()
其他颜色映射

Matplotlib彩色地图的亮度#

在这里,我们检查matplotlib颜色图的亮度值。请注意,有一些关于彩色地图的文档可用([列表-颜色映射]).

英里/小时.rc参数.更新({'字体大小': 12})

#特定cmap类别的每个子图的颜色映射数
_DSUBS公司 = {“感知一致序列”: 5, “顺序”: 6,
          '顺序(2)': 6, “分流”: 6, “循环”: ,
          “定性”: 4, “其他”: 6}

#子情节的颜色映射之间的间距
_直流电 = {“感知一致序列”: 1.4, “顺序”: 0.7,
       '顺序(2)': 1.4, “分流”: 1.4, “循环”: 1.4,
       “定性”: 1.4, “其他”: 1.4}

#单步浏览颜色映射的索引
x = 净现值.林斯空间(0, 1, 100)

#进行绘图
对于 cmap类别, cmap列表 在里面 cmaps公司.项目():

    #进行子绘图,以便颜色贴图有足够的空间。
    #默认值为每个子情节6个颜色贴图。
    dsub公司 = _DSUBS公司.得到(cmap类别, 6)
    nsubplots公司 = 整数(净现值.天花板(伦恩(cmap列表) / dsub公司))

    #挤压=False以类似方式处理单个子情节的情况
    无花果, 斧头 = plt公司.次要情节(n行=nsubplots公司, 挤压=False(错误),
                            使无花果化=(7, 2.6*nsubplots公司))

    对于 , 斧头 在里面 列举(斧头.平的):

        就地控制系统 = []  #文本标签的位置

        对于 j个, cmap公司 在里面 列举(cmap列表[*dsub公司:(+1)*dsub公司]):

            #获取颜色映射的RGB值并在中转换颜色映射
            #CAM02-UCS颜色空间。实验室[0,:,0]是亮度。
            阿拉伯联合酋长国 = 英里/小时.彩色地图[cmap公司](x)[净现值.新轴, :, :]
            实验室 = cspace_converter(空间转换器)(“sRGB1”, “CAM02-UCS”)(阿拉伯联合酋长国)

            #绘制颜色映射L值。对每个类别分别进行
            #所以每一个情节都很美。更改散射标记
            #沿绘图的颜色:
            # https://stackoverflow.com/q/8202605/

            如果 cmap类别 == “顺序”:
                #这些彩色地图都是从高亮度开始的,但我们需要它们
                #颠倒以使情节好看,所以颠倒顺序。
                年_ = 实验室[0, 时间:-1, 0]
                c(c)_ = x[::-1]
            其他的:
                年_ = 实验室[0, :, 0]
                c(c)_ = x

            直流电 = _直流电.得到(cmap类别, 1.4)  #cmaps水平间距
            斧头.分散(x + j个*直流电, 年_, c(c)=c(c)_, cmap公司=cmap公司, =300, 线宽度=0)

            #彩色地图标签的存储位置
            如果 cmap类别 在里面 (“感知一致序列”,
                                 “顺序”):
                位置.追加(x[-1] + j个*直流电)
            否则如果 cmap类别 在里面 (“分流”, “定性”, “循环”,
                                   “其他”, '顺序(2)'):
                位置.追加(x[整数(x.大小/2)] + j个*直流电)

        #设置轴限制:
        #*第1个子槽用作x轴极限的参考
        #*亮度值从0到100(y轴限制)
        斧头.设置限制(斧头[0, 0].获取限制())
        斧头.集合(_Y)(0, 100)

        #设置颜色贴图的标签
        斧头.X轴.设置标记位置(“顶部”)
        自动售票机 = 英里/小时.自动售票机.固定定位器(位置)
        斧头.X轴.设置主要定位器(自动售票机)
        格式化程序 = 英里/小时.自动售票机.固定格式工具(cmap列表[*dsub公司:(+1)*dsub公司])
        斧头.X轴.设置主要格式(格式化程序)
        斧头.X轴.设置tick_params(旋转=50)
        斧头.设置伊拉贝尔('亮度$L^*$', 字体大小=12)

    斧头.设置标签(_X)(cmap类别 + '颜色映射', 字体大小=14)

    无花果.紧凑的布局(h焊盘=0, 衬垫=1.5)
    plt公司.显示()
  • 彩色地图
  • 彩色地图
  • 彩色地图
  • 彩色地图
  • 彩色地图
  • 彩色地图
  • 彩色地图

灰度转换#

重要的是要注意颜色的灰度转换打印,因为它们可以用黑白打印机打印。如果没有仔细考虑,你的读者最终可能会读不懂打印,因为灰度会通过彩色地图。

转换为灰度有很多不同的方法[体重]。一些更好的是使用像素rgb值的线性组合,但根据我们对颜色强度的感知进行加权。非线性方法转换为灰度是使用\(L^*\)像素值。一般来说,类似的原则也适用于这个问题感知信息;也就是说,如果选择了单调递增\(L^*\)值,它将以合理的以灰度方式显示。

考虑到这一点,我们看到序列颜色图具有合理的灰度表示。一些Sequential2彩色地图有不错的效果尽管有些(秋季、春季、夏季、,冬季)具有非常小的灰度变化。如果使用这样的颜色贴图然后打印成灰度信息可能映射到相同的灰度值。分歧色彩图从外边缘的深灰色到中间的白色,各不相同。一些(PuOr和Seismical)一侧的灰色明显较另一侧深因此不是很对称。coolwarm的灰度范围很小打印出更统一的情节,丢失了很多细节。请注意重叠的标记轮廓有助于区分颜色映射与其他,因为一旦打印到灰度。许多定性和杂项颜色图,例如口音、hsv、jet和turbo,从深到浅再从深到深整个彩色地图都是灰色的。这将使观众无法一旦打印成灰度,就可以解释图中的信息。

英里/小时.rc参数.更新({'字体大小': 14})

#索引以单步浏览颜色映射。
x = 净现值.林斯空间(0, 1, 100)

梯度 = 净现值.林斯空间(0, 1, 256)
梯度 = 净现值.vstack(vstack)((梯度, 梯度))


定义 绘图颜色渐变(cmap类别, cmap列表):
    无花果, 斧头 = plt公司.次要情节(n行=伦恩(cmap列表), ncol公司=2)
    无花果.子程序_调整(顶部=0.95, 底部=0.01, 左边=0.2, 正确的=0.99,
                        无线传感器网络空间=0.05)
    无花果.副标题(cmap类别 + '颜色映射', 字体大小=14, =1, x=0.6)

    对于 斧头, 名称 在里面 拉链(斧头, cmap列表):

        #获取颜色贴图的RGB值。
        阿拉伯联合酋长国 = 英里/小时.彩色地图[名称](x)[净现值.新轴, :, :]

        #在CAM02-UCS颜色空间中获取颜色图。我们想要轻盈。
        实验室 = cspace_converter(空间转换器)(“sRGB1”, “CAM02-UCS”)(阿拉伯联合酋长国)
        L(左) = 实验室[0, :, 0]
        L(左) = 净现值.浮动32(净现值.vstack(vstack)((L(左), L(左), L(左))))

        斧头[0].显示图像(梯度, 方面=“自动”, cmap公司=英里/小时.彩色地图[名称])
        斧头[1].显示图像(L(左), 方面=“自动”, cmap公司='binary_r', vmin(虚拟货币单位)=0, vmax(最大值)=100)
        销售时点情报系统 = 列表(斧头[0].获取位置(_P)().边界)
        x_文本 = 销售时点情报系统[0] - 0.01
        y_text(_text) = 销售时点情报系统[1] + 销售时点情报系统[]/2
        无花果.文本(x_文本, y_text(_text), 名称, va公司=“中心”, =“正确”, 字体大小=10)

    #关闭所有勾选和脊椎,而不仅仅是带有颜色贴图的勾选和脊柱。
    对于 斧头 在里面 斧头.平的:
        斧头.设置_轴_关闭()

    plt公司.显示()


对于 cmap类别, cmap列表 在里面 计算机辅助程序.项目():

    绘图颜色渐变(cmap类别, cmap列表)
  • 感知一致的序列彩色地图
  • 顺序颜色映射
  • 顺序(2)颜色映射
  • 多样的颜色映射
  • 循环颜色贴图
  • 定性颜色图
  • 其他颜色映射

色觉缺陷#

有很多关于色盲的信息(例如,[色盲]). 此外,还有一些工具可用于转换图像他们如何寻找不同类型的色觉缺陷。

最常见的色觉缺陷包括辨别在红色和绿色之间。因此,避免使用红色和绿色的彩色贴图将通常避免许多问题。

工具书类#

脚本的总运行时间:(0分14.782秒)

Sphinx-Gallery生成的画廊