我想制作一个散点图,其中每个点都由附近点的空间密度着色。
我遇到了一个非常相似的问题,它显示了一个使用 R 的例子:
R Scatter Plot: symbol color represents number of overlapping points
使用 matplotlib 在 python 中完成类似操作的最佳方法是什么?
最佳答案
除了@askewchan 建议的 hist2d
或 hexbin
之外,您还可以使用与链接到的问题中已接受的答案相同的方法。
如果你想这样做:
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)
# 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)
plt.show()
如果您希望按密度顺序绘制点,以便最密集的点始终位于顶部(类似于链接示例),只需按 z 值对它们进行排序。我还将在这里使用较小的标记尺寸,因为它看起来更好一些:
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)
# Calculate the point density
xy = np.vstack([x,y])
z = gaussian_kde(xy)(xy)
# Sort the points by density, so that the densest points are plotted last
idx = z.argsort()
x, y, z = x[idx], y[idx], z[idx]
fig, ax = plt.subplots()
ax.scatter(x, y, c=z, s=50)
plt.show()
关于python - 如何在 matplotlib 中制作按密度着色的散点图?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20105364/