Сформировать тепловую карту, которая рассчитывается по значению диаграммы рассеяния? - PullRequest
1 голос
/ 11 ноября 2019

У меня есть диаграмма разброса данных pandas dataframe с различной интенсивностью (закодированная в холодные и теплые цвета), и я хотел преобразовать ее в непрерывный вывод в виде бина, похожий на тепловую карту.

the original scatterplot

Прочитав несколько вопросов, я увидел, что большинство людей используют методы, которые включают преобразование в график плотности или 2-мерную гистограмму, такую ​​как этакод ниже (все еще использую мой фрейм данных sim):

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from scipy.ndimage.filters import gaussian_filter

def myplot(x, y, s, bins=1000):
    heatmap, xedges, yedges = np.histogram2d(x, y, bins=bins)
    heatmap = gaussian_filter(heatmap, sigma=s)

    extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
    return heatmap.T, extent

fig, axs = plt.subplots(2, 2)

# Generate some test data

sigmas = [0, 16, 32, 64]

for ax, s in zip(axs.flatten(), sigmas):
    if s == 0:
        ax.scatter(sim[0], sim[1], s=10, lw=0, c=sim["Choice"],cmap='coolwarm', label='Choice')
        ax.set_title("Scatter plot")
    else:
        img, extent = myplot(sim[0], sim[1], s)
        ax.imshow(img, extent=extent, origin='lower', cmap=cm.jet)
        ax.set_title("Smoothing with  $\sigma$ = %d" % s)

plt.show()

attempts to generate a heatmap

или:

import numpy as np
import matplotlib.pyplot as plt

plt.hist2d(sim[0],sim[1],weights=sim["Choice"],bins=100,cmap="coolwarm")

plt.show()

other attempt to create a heatmap

Как я мог вместо выполнения операции подсчета / суммирования выбрать другой способ вменения значения каждой ячейки / области на графике?

В этом случае я хочу взять среднее значение ближайших точек (значение 0, если рядом нет точек), но сказать, что мне нужен режим, или значение ближайшего соседа, или некоторая функция местоположения на графике с точкамии значение в каждой точке в качестве ввода. Как я могу сделать такую ​​вещь?

Несколько строк примеров данных из моего sim кадра данных:

        0          1         Choice
 0  -4.809010   -3.207281   0.078947
 1  4.367746    -0.207146   0.421053
 2  3.764409    4.295580    0.026316
 3  -0.748293   -1.657736   0.263158
 4  -3.867472   3.846792    0.421053
 5  4.369304    0.823736    0.105263
 6  4.181189    -0.651535   0.131579
 7  -0.748293   -1.657736   0.500000
 8  -5.766971   -0.585494   0.131579
 9  2.498427    0.322623    0.210526
10  2.626870    4.064973    0.473684
...