您还可以通过首先计算散点分布的核密度估计,然后使用密度值为散点的每个点指定颜色来为点着色。要修改前面示例中的代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde as kde
from matplotlib.colors import Normalize
from matplotlib import cm
N = 10000
mean = [0,0]
cov = [[2,2],[0,2]]
samples = np.random.multivariate_normal(mean,cov,N).T
densObj = kde( samples )
def makeColours( vals ):
colours = np.zeros( (len(vals),3) )
norm = Normalize( vmin=vals.min(), vmax=vals.max() )
#Can put any colormap you like here.
colours = [cm.ScalarMappable( norm=norm, cmap='jet').to_rgba( val ) for val in vals]
return colours
colours = makeColours( densObj.evaluate( samples ) )
plt.scatter( samples[0], samples[1], color=colours )
plt.show()
不久前,当我注意到 scatter 函数的文档时,我学会了这个技巧——
c : color or sequence of color, optional, default : 'b'
c
可以是单个颜色格式字符串,也可以是长度为的颜色规范序列N
,或者是要使用和通过 kwargs 指定N
的颜色映射到颜色的数字序列(见下文)。请注意,它不应是单个数字 RGB 或 RGBA 序列,因为它与要进行颜色映射的值数组无法区分。 可以是一个二维数组,其中的行是 RGB 或 RGBA,但是,包括为所有点指定相同颜色的单行的情况。cmap
norm
c
c