有一个说明性的例子how to create custom colormaps here。 文档字符串对于理解 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 np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
def 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 = 1000
array_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-loop
for 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
是要走的路。
你能澄清你的问题一点?例如,'c ='指定线条的颜色,而你正在谈论点。你只能指定一个'markerfacecolor',如果你真的想要分数,分散可能是一个更好的选择。确实列出了“ListedColormap”,而不是连续的,参见'LinearSegmentedColormap'。 –
这很奇怪,它应该是点,它看起来像点。 – Trollbrot
你可以偏离过去,但那就是你应该澄清的。我们无法看到您正在使用的情节风格。如果你使用'plt.plot(values,'o')',你将只绘制标记而不绘制线条,但是标记将会有一个固定的颜色,它不会随着值的变化而变化。 –