Как разделить область между двумя координатами на блоки и присвоить некоторым значениям эти блоки? - PullRequest
0 голосов
/ 22 мая 2019

В основном я должен создать тепловую карту толпы, присутствующей в области. У меня есть две координаты. X начинается с 0, а максимальный - 119994. Y - от -14 000 до + 27 000. Я должен разделить эти координаты на столько блоков блоков, сколько захочу, посчитать количество людей в каждом блоке и создать тепловую карту всей этой области. В основном покажите многолюдность области, разделенной на блоки.

I have data in the below format:-
Employee_ID X_coord Y_coord_start Y_coord_end
    23       1333      0           6000
    45       3999    7000          17000

Я попытался разделить оба максимума координат на 100 (чтобы получить 100 блоков) и попытался найти координаты блока, но это было очень сложно.

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

У меня есть еще один вопрос относительно точечного графика: - Мои данные: -

Batch_ID         Pieces_Productivity
181031008780     4.578886
181031008781     2.578886

Когда я строю его, используя следующий код: -

plt.scatter(list(df_books_location.Batch_ID),list(df_books_location['Pieces_productivity']), s=area,  alpha=0.5)

Это не дает мне правильный сюжет. Но когда я строю график с маленькими целыми числами (0-1000) для Batch_ID, я получаю хороший график. Как обрабатывать большие целые числа для построения?

1 Ответ

0 голосов
/ 22 мая 2019

Я не знаю, какая из обеих Y_coord_ -строк должна давать фактическую координату Y, а также не знаю, должен ли ваш график оценивать данные на строгой "сетке" или, скорее, сгладить их;поэтому я использую imshow() и sns.kdeplot() в приведенном ниже коде:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

### generate some data
np.random.seed(0)
data = np.random.multivariate_normal([0, 0], [(1, .6), (.6, 1)], 100)

## this would e.g. be X,Y=df['X_coord'], df['Y_coord_start'] :
X,Y=data[:,0],data[:,1] 


fig,ax=plt.subplots(nrows=1,ncols=3,figsize=(10,5))
ax[0].scatter(X,Y)
sns.kdeplot(X,Y, shade=True, ax=ax[1],cmap="viridis")
## the X,Y points are binned into 10x10 bins here, you will need 
#  to adjust the amount of bins so that it looks "nice" for you
heatmap, xedges, yedges = np.histogram2d(X, Y, bins=(10,10))
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
im=ax[2].imshow(heatmap.T, extent=extent, 
            origin="lower",aspect="auto",
            interpolation="nearest") ## also play with different interpolations

## Loop over heatmap dimensions and create text annotations:
#  note that we need to "push" the text from the lower left corner of each pixel
#     into the center of each pixel 
## also try to choose a text color which is readable on all pixels, 
#     or e.g. use vmin=… vmax=  to adjust the colormap such that the colors
#     don't clash with e.g. white text

pixel_center_x=(xedges[1]-xedges[0])/2.
pixel_center_y=(yedges[1]-yedges[0])/2.
for i in range(np.shape(heatmap)[1]):
    for j in range(np.shape(heatmap)[0]):
        text = ax[2].text(pixel_center_x+xedges[j], pixel_center_y+yedges[i],'{0:0.0f}'.format(heatmap[j, i]),
                       ha="center", va="center", color="w",fontsize=6)

plt.colorbar(im)
plt.show()

выход:

Updated plot result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...