Python 自定义Matplotlib类似于颜色映射的pgfplots

Python 自定义Matplotlib类似于颜色映射的pgfplots,python,matplotlib,color-mapping,Python,Matplotlib,Color Mapping,是否可以从pgfplots获取蓝-黄-红颜色图,如本例中的matplotlib 我已经了解了如何在matplotlib中定义自定义颜色映射,但这似乎非常困难。定义自定义cmap是一种方法。这并不难,但您必须确保理解颜色dict中的所有值 为每种颜色指定三列值。第一列是颜色出现的位置,0为第一列,1为最后一列。由于需要三种颜色,因此有三个均匀分布的位置定义为0、0.5和1.0 你想要: 0.0:蓝色 0.5:黄色 1.0:红色 第二列定义该位置的“最多”颜色,第三列定义该位置的“从/之后”颜色。如

是否可以从
pgfplots
获取蓝-黄-红颜色图,如本例中的
matplotlib


我已经了解了如何在matplotlib中定义自定义颜色映射,但这似乎非常困难。

定义自定义cmap是一种方法。这并不难,但您必须确保理解
颜色dict
中的所有值

为每种颜色指定三列值。第一列是颜色出现的位置,0为第一列,1为最后一列。由于需要三种颜色,因此有三个均匀分布的位置定义为0、0.5和1.0

你想要:

0.0:蓝色

0.5:黄色

1.0:红色

第二列定义该位置的“最多”颜色,第三列定义该位置的“从/之后”颜色。如果你想让颜色逐渐褪色,你应该保持原样。指定不同的颜色允许颜色贴图在特定位置后突然“跳跃”

要在位置0.0处获得蓝色,请将红色和绿色设置为0,将蓝色设置为1。要在位置0.5处变为黄色,请将红色和绿色设置为1,将蓝色设置为零。等等

import matplotlib as mpl
from matplotlib import pyplot as plt
import numpy as np

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

custom_cmap = mpl.colors.LinearSegmentedColormap('mymap', cdict, 256)

plt.imshow(np.arange(36).reshape(6,6), cmap=custom_cmap, interpolation='none')

定义自定义cmap是一种方法。这并不难,但您必须确保理解
颜色dict
中的所有值

为每种颜色指定三列值。第一列是颜色出现的位置,0为第一列,1为最后一列。由于需要三种颜色,因此有三个均匀分布的位置定义为0、0.5和1.0

你想要:

0.0:蓝色

0.5:黄色

1.0:红色

第二列定义该位置的“最多”颜色,第三列定义该位置的“从/之后”颜色。如果你想让颜色逐渐褪色,你应该保持原样。指定不同的颜色允许颜色贴图在特定位置后突然“跳跃”

要在位置0.0处获得蓝色,请将红色和绿色设置为0,将蓝色设置为1。要在位置0.5处变为黄色,请将红色和绿色设置为1,将蓝色设置为零。等等

import matplotlib as mpl
from matplotlib import pyplot as plt
import numpy as np

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

custom_cmap = mpl.colors.LinearSegmentedColormap('mymap', cdict, 256)

plt.imshow(np.arange(36).reshape(6,6), cmap=custom_cmap, interpolation='none')

@RutgerKassies对线性彩色贴图在matplotlib中的工作原理有很好的解释。当需要具有不均匀过渡或“硬”截止的彩色贴图时,需要指定阈值的完整
dict

但是,对于颜色之间具有均匀过渡的简单颜色贴图,有一个方便的“工厂函数”(实际上,您甚至可以使用它进行不均匀过渡,只要它们不是“硬”过渡)

例如(以Rutger为例),我们可以通过以下方法实现:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

cmap = LinearSegmentedColormap.from_list('mymap', ['blue', 'yellow', 'red'])

plt.imshow(np.arange(36).reshape(6,6), cmap=cmap, interpolation='none')
plt.show()

@RutgerKassies对线性彩色贴图在matplotlib中的工作原理有很好的解释。当需要具有不均匀过渡或“硬”截止的彩色贴图时,需要指定阈值的完整
dict

但是,对于颜色之间具有均匀过渡的简单颜色贴图,有一个方便的“工厂函数”(实际上,您甚至可以使用它进行不均匀过渡,只要它们不是“硬”过渡)

例如(以Rutger为例),我们可以通过以下方法实现:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

cmap = LinearSegmentedColormap.from_list('mymap', ['blue', 'yellow', 'red'])

plt.imshow(np.arange(36).reshape(6,6), cmap=cmap, interpolation='none')
plt.show()

在旁注上,使用
LinearSegmentedColormap可以更容易地构造它。在旁注上,使用
LinearSegmentedColormap可以更容易地构造它。在旁注上,使用
LinearSegmentedColormap可以更容易地构造它,非常感谢您的回答:)由于简单,我会将您的帖子标记为已被接受,但我认为上一篇帖子更详细。@DavidWinchester-别担心!拉格的帖子更详细,解释得更好!我只是想展示一个简单方法的示例。:)您好,非常感谢您的回答:)由于简单,我会将您的帖子标记为已被接受,但我认为上一篇帖子更详细。@DavidWinchester-别担心!拉格的帖子更详细,解释得更好!我只是想展示一个简单方法的示例。:)