我怎样才能做matplotlib密度散点图?
我想制作一个散点图,每个点都用附近点的空间密度来着色。
我遇到了一个非常类似的问题,它显示了一个使用R的例子:
R散点图:符号颜色表示重叠点的数量
使用matplotlib在python中完成类似的最好的方法是什么?
除了@askewchanbuild议的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, edgecolor='') plt.show()
如果你想按照密度的顺序绘制点,那么最密集的点总是在顶部(类似于链接的例子),只要按z值对它们进行sorting即可。 我也打算在这里使用更小的标记尺寸,因为它看起来更好一些:
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, edgecolor='') plt.show()
你可以做一个直方图:
import numpy as np import matplotlib.pyplot as plt # fake data: a = np.random.normal(size=1000) b = a*3 + np.random.normal(size=1000) plt.hist2d(a, b, (50, 50), cmap=plt.cm.jet) plt.colorbar()