1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python 在地图上的散点图-Matplotlib中的散点图等高线

python 在地图上的散点图-Matplotlib中的散点图等高线

时间:2024-02-27 06:30:07

相关推荐

python 在地图上的散点图-Matplotlib中的散点图等高线

Tyson

基本上,你需要某种密度估计。有多种方法可以做到这一点:使用某种类型的二维直方图(例如matplotlib.pyplot.hist2d或matplotlib.pyplot.hexbin)(也可以将结果显示为等高线--只需使用numpy.histogram2d,然后对结果数组进行等高线即可。)

进行核密度估计(KDE)并对结果进行轮廓化。KDE本质上是一个平滑的直方图。它不是一个点落入一个特定的垃圾箱,而是给周围的垃圾箱增加了一个权重(通常是高斯“钟形曲线”)。

使用二维直方图简单易懂,但基本上可以得到“块状”的结果。

做第二个“正确的”有一些皱纹(即没有一个正确的方法)。这里我不详细介绍,但是如果你想从统计学上解释结果,你需要阅读它(特别是带宽选择)。

无论如何,这里有一个不同的例子。我将以类似的方式绘制每一个,因此我不使用等高线,但您可以同样轻松地使用等高线图绘制二维直方图或高斯KDE:import numpy as np

import matplotlib.pyplot as plt

from scipy.stats import kde

np.random.seed(1977)

# Generate 200 correlated x,y points

data = np.random.multivariate_normal([0, 0], [[1, 0.5], [0.5, 3]], 200)

x, y = data.T

nbins = 20

fig, axes = plt.subplots(ncols=2, nrows=2, sharex=True, sharey=True)

axes[0, 0].set_title('Scatterplot')

axes[0, 0].plot(x, y, 'ko')

axes[0, 1].set_title('Hexbin plot')

axes[0, 1].hexbin(x, y, gridsize=nbins)

axes[1, 0].set_title('2D Histogram')

axes[1, 0].hist2d(x, y, bins=nbins)

# Evaluate a gaussian kde on a regular grid of nbins x nbins over data extents

k = kde.gaussian_kde(data.T)

xi, yi = np.mgrid[x.min():x.max():nbins*1j, y.min():y.max():nbins*1j]

zi = k(np.vstack([xi.flatten(), yi.flatten()]))

axes[1, 1].set_title('Gaussian KDE')

axes[1, 1].pcolormesh(xi, yi, zi.reshape(xi.shape))

fig.tight_layout()

plt.show()

有一点需要注意:由于点数太多,scipy.stats.gaussian_kde将变得非常慢。通过做一个近似值来加速它是相当容易的——只需取二维直方图,用一个半径和协方差都合适的高斯滤波器来模糊它。如果你愿意,我可以举个例子。

另一个警告:如果在非笛卡尔坐标系中执行此操作,则这些方法都不适用!得到球壳的密度估计要复杂一些。

赞踩评论- 3月31日 00:19

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。