是否可以从pgfplots
获取蓝色 - 黄色 - 红色的colourmap,如matplotlib
中的https://tex.stackexchange.com/questions/39145/scaling-colormaps-with-pgfplots所示?
我已经看过如何在matplotlib中定义自定义colourmaps,但这似乎很难。
答案 0 :(得分:3)
定义自定义cmap是可行的方法。这并不困难,但您必须确保理解color 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')
答案 1 :(得分:3)
@RutgerKassies对matplotlib中线性色图的工作原理有一个很好的解释。当您需要具有不均匀过渡的色彩映射或“#34; hard"截止,您需要指定阈值的完整dict
。
然而,有一个方便的工厂功能"对于简单的色彩映射,颜色之间均匀转换:LinearSegmentedColormap.from_list
(实际上,您甚至可以使用它进行不均匀的过渡,只要它们不是"硬"过渡。)
例如(为了窃取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()