有一个说明性的例子如何在这里创建自定义的项圈..文档字符串对于理解cdict..一旦你把它藏在腰带里,你就可以用cdict就像这样:cdict = {'red': ((0.0, 1.0, 1.0),
(0.1, 1.0, 1.0), # red
(0.4, 1.0, 1.0), # violet
(1.0, 0.0, 0.0)), # blue
'green': ((0.0, 0.0, 0.0),
(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.0),
(0.1, 0.0, 0.0), # red
(0.4, 1.0, 1.0), # violet
(1.0, 1.0, 0.0)) # blue
}
虽然cdict格式给了您很大的灵活性,我发现对于简单的渐变,它的格式是非常不直观的。下面是一个实用函数,用于帮助生成简单的LinearSegmentedColormaps:import numpy as npimport matplotlib.pyplot as pltimport matplotlib.colors as mcolorsdef make_colormap(seq):
"""Return a LinearSegmentedColormap
seq: a sequence of floats and RGB-tuples. The floats should be increasing
and in the interval (0,1).
"""
seq = [(None,) * 3, 0.0] + list(seq) + [1.0, (None,) * 3]
cdict = {'red': [], 'green': [], 'blue': []}
for i, item in enumerate(seq):
if isinstance(item, float):
r1, g1, b1 = seq[i - 1]
r2, g2, b2 = seq[i + 1]
cdict['red'].append([item, r1, r2])
cdict['green'].append([item, g1, g2])
cdict['blue'].append([item, b1, b2])
return mcolors.LinearSegmentedColormap('CustomMap', cdict)c = mcolors.ColorConverter().to_rgb
rvb = make_colormap(
[c('red'), c('violet'), 0.33, c('violet'), c('blue'), 0.66, c('blue')])N = 1000array_dg = np.random.uniform(0, 10, size=(N, 2))colors = np.random.uniform(-2, 2, size=(N,))plt.scatter(array_dg[:, 0], array_dg[:, 1], c=colors, cmap=rvb)plt.colorbar()plt.show()
顺便说一下,for-loopfor i in range(0, len(array_dg)):
plt.plot(array_dg[i], markers.next(),alpha=alpha[i], c=colors.next())
为每一次呼叫策划一个点plt.plot..这将工作的少数点,但将变得极其缓慢的许多点。plt.plot只能画一种颜色,但是plt.scatter可以为每个点指定不同的颜色。因此,plt.scatter是该走的路。