0

我正在绘制一个 2D 直方图来显示,例如,闪电的集中度(由它们在经度和纬度中记录的位置给出)。数据点的数量不是太大(53),结果太粗略。这是结果的图片:

出于这个原因,我试图找到一种方法来加权来自周围垃圾箱的数据。例如,在经度 = 130 和纬度 = 34.395 处有一个 bin 记录了 0 个闪电,但它周围有几个。我希望这个垃圾箱能以某种方式反映它周围的浓度。换句话说,我想通过重叠的 bin 来平滑数据(这样一个数据点可以被不同的连续 bin 计算多次)。

我知道 hist2d 具有“权重”的输入选项,但这只会使数据点在其 bin 中更加“重要”。

简化的代码如下,我可以澄清任何需要的东西。

import numpy as np
import matplotlib.pyplot as plt

# Here are the data, to experiment if needed
longitude = np.array([119.165, 115.828, 110.354, 117.124, 119.16 , 107.068, 108.628, 126.914, 125.685, 116.608, 122.455, 116.278, 123.43, 128.84, 128.603, 130.192, 124.508, 121.916, 133.245, 125.088, 126.641, 127.224, 113.686, 129.376, 127.312, 121.353, 117.834, 125.219, 138.077, 153.299, 135.66 , 128.391, 118.011, 117.313, 119.986, 118.619, 119.178, 120.295, 121.991, 123.519, 135.948, 132.224, 129.317, 135.334, 132.923, 129.828, 139.006, 140.813, 116.207, 139.254, 120.922, 112.171, 143.508])

latitude = np.array([34.381, 34.351, 34.359, 34.357, 34.364, 34.339, 34.351, 34.38, 34.381, 34.366, 34.373, 34.366, 34.369, 34.387, 34.39 , 34.39 , 34.386, 34.371, 34.394, 34.386, 34.384, 34.387, 34.369, 34.4  , 34.396, 34.37 , 34.374, 34.383, 34.403, 34.429, 34.405, 34.385, 34.367, 34.36 , 34.367, 34.364, 34.363, 34.367, 34.367, 34.369, 34.399, 34.396, 34.382, 34.401, 34.396, 34.392, 34.401, 34.401, 34.362, 34.404, 34.382, 34.346, 34.406])

# Number of bins 
Nbins = 15
# Plot histogram of the positions
plt.hist2d(longitude,latitude, bins=Nbins)
plt.plot(longitude,latitude,'o',markersize = 8, color = 'k')
plt.plot(longitude,latitude,'o',markersize = 6, color = 'w')
plt.colorbar()
plt.show()
4

1 回答 1

2

也许您对二维直方图或直方图的概念感到困惑。除了直方图是将数据分组到图中的条形图这一事实之外,它还是概率函数的离散化估计。在您的情况下,存在概率。出于这个原因,我不会尝试重叠直方图。

此外,由于直方图是“离散的”,它必然是粗糙的。实际上,直方图的分辨率是关于所需可视化的重要参数。

回到你的问题,如果你想消除粗糙的效果,你可能只是想玩Nbins

也许,其他图表类型更适合您的使用:请参阅此图库和带阴影的 2D 密度图。

于 2018-06-27T16:51:15.597 回答