【问题标题】:Attempting to create a color map for most overlapping points尝试为大多数重叠点创建颜色图
【发布时间】:2020-03-04 18:33:54
【问题描述】:

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

   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)

xy 都是我的熊猫数据框中的列,并且它们都具有 NaN 值。我尝试通过执行~np.isnan(xy) 来取出所有NaN 值以仅获取实际值,因为它不允许我使用infs 或NaN,因为我相信gaussian_kde() 正在抛出该错误。此外,就NaN 值的位置而言,两列并不相互对齐,并且一列的NaN 值比另一列多。两者也具有相同数量的元素。当我运行我的代码时,它一直在运行,我必须停止它。任何想法可能有什么问题?

【问题讨论】:

  • 发布您的示例时,请显示您正在导入的库。我们不知道gaussian_kde 来自哪里。 x 和 y 向量的典型大小是多少?
  • @Liris 我继续更新以添加导入的包。 x 和 y 向量的大小约为 200k。

标签: python pandas matplotlib colormap


【解决方案1】:

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

inds = ~np.logical_or(np.isnan(x), np.isnan(y))
x = x[inds]
y = y[inds]

从这个example,我认为你的代码应该是这样的:

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 秒。

【讨论】:

  • 我继续编译,成功了!有趣的是,由于我的矢量尺寸很大,它确实需要 300 秒才能编译。有没有办法在不使用 gaussian_kde 的情况下减少这个时间?我正在尝试创建一个显示重叠点最多的区域的颜色图。
  • 我不这么认为。如果您有足够多的点数,您可以随机选择其中一些以减少您将提供给gaussian_kde 的点数!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2022-10-16
  • 2015-01-04
  • 2017-07-16
相关资源
最近更新 更多