python - 尝试为大多数重叠点创建颜色图
问题描述
我在尝试在散点图中创建颜色图时遇到了问题。这是我的代码的一部分:
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
都是我的熊猫数据框中的列,并且它们都具有NaN
值。NaN
我尝试通过仅获取实际值来取出所有值,~np.isnan(xy)
因为它不允许我采用 infs 或 NaN,因为我相信gaussian_kde()
会抛出该错误。NaN
此外,两列在这些值的位置方面并不相互对齐,并且一列的NaN
值比另一列多。两者也具有相同数量的元素。当我运行我的代码时,它一直在运行,我必须停止它。任何想法可能有什么问题?
解决方案
您必须使用以下方法过滤 Nans:
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 秒。
推荐阅读
- java - 使用 jetty 和 servlet 上传文件
- annotations - 函数的 Modelica 注释逆被忽略
- docker - 没有互联网的 Docker
- excel - 将工作表复制为新文件,所有单元格都为数字而不是公式
- amazon-web-services - 为什么 AWS 状态机不会将执行显示为“超时”,而是显示为“失败”?
- python - 刽子手游戏(Python)
- node.js - 为什么我保存 ObjectId('key'),而不是 mongodb 中的值?
- sql-server - 即使数据没有更新,MERGE 语句也会更新
- mfc - 在 MFC 应用程序中调整大小的 PNG 图像的显示问题
- c++ - 定期清理地图