是否可以在matplotlib中为edgecolors指定colourmap?

时间:2015-11-26 04:46:53

标签: python matplotlib colors

假设需要根据某个变量更改matplotlib标记的边缘颜色,是否可以为标记的边缘颜色指定某种离散颜色贴图? 这类似于通过cmap更改标记的面部颜色。

当使用图表范围之外的箭头显示限制时,我似乎无法根据另一个变量改变箭头颜色。 例如:在下面的代码中,箭头的颜色不会随z的变化而变化。

plt.scatter(x,y, c=z, marker=u'$\u2191$', s=40,cmap=discrete_cmap(4, 'cubehelix') )

1 个答案:

答案 0 :(得分:1)

您可以使用edgecolors参数进行分散。

您需要列出要提供给scatter的颜色列表。我们可以使用您选择的colormapNormalizate实例执行此操作,将z函数重新调整为0-1范围。

我假设您的discrete_cmap功能类似于链接here的功能。

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

# def discrete_cmap() is omitted here...

# some sample data
x = np.linspace(0,10,11)
y = np.linspace(0,10,11)
z = x+y

# setup a Normalization instance
norm = colors.Normalize(z.min(),z.max())

# define the colormap
cmap = discrete_cmap(4, 'cubehelix')

# Use the norm and cmap to define the edge colours
edgecols = cmap(norm(z))

# Use that with the `edgecolors` argument. Set c='None' to turn off the facecolor
plt.scatter(x,y, edgecolors=edgecols, c = 'None', marker='o', s=40 )

plt.show()

enter image description here