python中的2D密度或频率散点图

时间:2017-12-07 06:12:47

标签: python matplotlib plot

如何在matplotlib中制作由密度着色的散点图? 当我绘制一个颜色条时它显示密度比例,我想要计数/百分比。如何将密度估计转换为频率计数?

预期结果如本文第8页图3所示:https://www.atmos-meas-tech.net/9/3293/2016/amt-9-3293-2016.pdf

如果有人可以指导我绘制类似于纸张中显示的情节,那将非常有帮助。提前谢谢。

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()
cax=ax.scatter(x, y, c=z, s=10, cmap=plt.cm.jet)
cbar = fig.colorbar(cax)
plt.show()

另一种方法:

#libraries
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import kde

# create data
x = np.random.normal(size=500)
y = x * 3 + np.random.normal(size=500)


# Evaluate a gaussian kde on a regular grid of nbins x nbins over
nbins=50
k = kde.gaussian_kde([x,y])
xi, yi = np.mgrid[min(x):max(x):nbins*1j, min(y):max(y):nbins*1j]
zi = k(np.vstack([xi.flatten(), yi.flatten()]))

# Add color bar
plt.pcolormesh(xi, yi, zi.reshape(xi.shape), cmap=plt.cm.jet)
plt.colorbar()
plt.show() 

1 个答案:

答案 0 :(得分:0)

这不是直方图,它只是在网格上对你的kde进行采样......

试试这个:plt.hist2d(x, y)

您可以使用bins=whatever参数和更多选项来指定容器......