我一直在尝试做同样的事情,基于同一个早期的帖子,我想我只是想出来了!诀窍是使用matplotlib.colors.Normalize()来定义一个刻度,然后根据一些数据集(xnorm,ynorm)对其进行加权:import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mplc
import matplotlib.cm as cm
from scipy.stats import gaussian_kde
def kdeplot(x,y,xnorm,ynorm):
xy = np.vstack([x,y])
z = gaussian_kde(xy)(xy)
wt = 1.0*len(x)/(len(xnorm)*1.0)
norm = mplc.Normalize(vmin=0, vmax=8/wt)
cmap = cm.gnuplot
idx = z.argsort()
x, y, z = x[idx], y[idx], z[idx]
args = (x,y)
kwargs = {'c':z,'s':10,'edgecolor':'','cmap':cmap,'norm':norm}
return args, kwargs
# (x1,y1) is some data set whose density map coloring you
# want to scale to (xnorm,ynorm)
args,kwargs = kdeplot(x1,y1,xnorm,ynorm)
plt.scatter(*args,**kwargs)
我使用反复试验来优化我的特定数据和颜色映射选择的规范化。Here's我的数据看起来像是按自身比例缩放的;here's我的数据缩放为一些比较数据(在图片的底部)。在
我不确定这种方法是否完全通用,但它在我的例子中是有效的:我知道我的数据和比较数据在参数空间的相似区域,它们都有高斯散射,所以我可以使用一个由数据点数量确定的朴素的线性缩放,结果是在视觉上给出了正确的想法。在