Python 尝试为大多数重叠点创建颜色贴图

Python 尝试为大多数重叠点创建颜色贴图,python,pandas,matplotlib,colormap,Python,Pandas,Matplotlib,Colormap,我在尝试在散点图中创建颜色贴图时遇到了一个问题。以下是我的代码部分: import numpy as np import matplotlib.pyplot as plt from scipy.stats import gaussian_kde f, ax = plt.subplots() xy = np.vstack([x, y]) xy = xy[~np.isnan(xy)] z = gaussian_kde(xy)(xy) i

我在尝试在散点图中创建颜色贴图时遇到了一个问题。以下是我的代码部分:

   import numpy as np
   import matplotlib.pyplot as plt
   from scipy.stats import gaussian_kde

    f, ax = plt.subplots()

    xy = np.vstack([x, y])
    xy = xy[~np.isnan(xy)]
    z = gaussian_kde(xy)(xy)

    idx = z.argsort()
    x, y, z = x[idx], y[idx], z[idx]

    plt.scatter(x, y, c=z, cmap='Reds', alpha=0.5)

x
y
都是我的panda数据框中的列,它们都有
NaN
值。我尝试通过执行
~np.isnan(xy)
来获取所有
NaN
值,因为它不允许我获取infs或NaNs,因为我认为
gaussian_kde()
抛出了那个错误。此外,两列在那些
NaN
值的位置上不对齐,并且一列的
NaN
值比另一列多。两者也有相同数量的元素。当我运行代码时,它会一直运行,我必须停止它。有什么问题吗?

您必须使用以下方法过滤NAN:

inds = ~np.logical_or(np.isnan(x), np.isnan(y))
x = x[inds]
y = y[inds]
因此,我认为您的代码应该如下所示:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde

# Generate fake data
x = np.random.normal(size=1000)
y = x * 3 + np.random.normal(size=1000)

# removing nans in both vectors at the same place
inds = ~np.logical_or(np.isnan(x), np.isnan(y))
x = x[inds]
y = y[inds]

# Calculate the point density
xy = np.vstack([x,y])
z = gaussian_kde(xy)(xy)

fig, ax = plt.subplots()
ax.scatter(x, y, c=z, s=100, edgecolor='')
plt.show()

请记住,如果x和y是非常大的向量,
gaussian_kde
可能需要很长时间才能运行。对于50000的向量长度,运行大约需要40.5秒。

发布示例时,请显示要导入的库。我们不知道gaussian_kde从哪里来。x和y向量的典型大小是多少?@Liris I继续更新,添加了导入的包。x和y向量的大小约为200k。我继续编译,它成功了!有趣的是,由于我有很大的向量大小,编译它确实花了300秒。在不使用gaussian_kde的情况下,是否有任何方法可以减少此时间?我正在尝试创建一个彩色地图,显示重叠点最多的区域。我不这么认为。如果您有足够多的点,您可以随机选取其中的一些点,以减少您将馈送到
gaussian_kde
的点的数量!