Как сгладить или перекрыть корзины в pyplot.hist2d? - PullRequest
0 голосов
/ 27 июня 2018

Я строю 2D гистограмму, чтобы показать, например, концентрацию молний (определяемую их положением, зарегистрированным по долготе и широте). Количество точек данных не слишком велико (53), а результат слишком грубый. Вот картинка с результатом:

По этой причине я пытаюсь найти способ взвешивания в данных из окружающих контейнеров. Например, есть корзина на долготе = 130 и широте = 34,395 с зарегистрированной 0 молнией, но с несколькими вокруг нее. Я бы хотел, чтобы эта корзина отражала концентрацию вокруг нее. Другими словами, я хочу сгладить данные, используя перекрывающиеся ячейки (так, чтобы точка данных могла быть подсчитана более одного раза по различным смежным ячейкам).

Я понимаю, что hist2d имеет опцию ввода для "весов", но это будет работать только для того, чтобы сделать точку данных более "важной" в пределах ее корзины.

Упрощенный код приведен ниже, и я могу уточнить все, что нужно.

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()

1 Ответ

0 голосов
/ 27 июня 2018

Возможно, вы путаетесь с концепцией 2D-гистограммы или гистограммы. Помимо того факта, что гистограмма является гистограммой, объединяющей данные в график, она также представляет собой конкретизированную оценку функции вероятности. В вашем случае вероятность присутствия. По этой причине я бы не пытался перекрывать гистограммы.

Более того, поскольку гистограмма является «дискретной», она обязательно будет грубой. На самом деле, разрешение гистограммы является важным параметром в отношении желаемой визуализации.

Возвращаясь к вашему вопросу , если вы хотите устранить грубый эффект, вы можете просто захотеть сыграть на Nbins.

Возможно, другой тип графика подойдет вам лучше: посмотрите эту галерею и график 2D-плотности с затенением.

...