尝试为大多数重叠点创建颜色图
Attempting to create a color map for most overlapping points
我运行正在尝试在散点图中创建彩色地图时遇到问题。这是我的代码部分:
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
值。我尝试通过执行 ~np.isnan(xy)
来取出所有 NaN
值以仅获取实际值,因为它不允许我使用 infs 或 NaN,因为我相信 gaussian_kde()
会抛出该错误。此外,这两列在 NaN
值的位置方面彼此不对齐,并且一列的 NaN
值多于另一列。两者也具有相同数量的元素。当我 运行 我的代码时,它只是保持 运行ning 而我必须停止它。有什么想法可能是错误的吗?
您必须使用以下方法过滤 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 秒
我运行正在尝试在散点图中创建彩色地图时遇到问题。这是我的代码部分:
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
值。我尝试通过执行 ~np.isnan(xy)
来取出所有 NaN
值以仅获取实际值,因为它不允许我使用 infs 或 NaN,因为我相信 gaussian_kde()
会抛出该错误。此外,这两列在 NaN
值的位置方面彼此不对齐,并且一列的 NaN
值多于另一列。两者也具有相同数量的元素。当我 运行 我的代码时,它只是保持 运行ning 而我必须停止它。有什么想法可能是错误的吗?
您必须使用以下方法过滤 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 的矢量长度,运行.