2D平面中x,y和z值的热图(py-sphviewer)

时间:2019-06-07 08:52:13

标签: python python-3.x matplotlib heatmap

我正在使用以下方法使用py-sphviewer创建2D直方图:

def sphviewer_plot(x, y, nb=32, xsize=500, ysize=500):   
    xmin = np.min(x)
    xmax = np.max(x)
    ymin = np.min(y)
    ymax = np.max(y)

    x0 = (xmin+xmax)/2.
    y0 = (ymin+ymax)/2.

    pos = np.zeros([len(x), 3])
    pos[:,0] = x
    pos[:,1] = y
    w = np.ones(len(x))

    P = sph.Particles(pos, w, nb=nb)
    S = sph.Scene(P)
    S.update_camera(r='infinity', x=x0, y=y0, z=0, 
                    xsize=xsize, ysize=ysize)
    R = sph.Render(S)
    R.set_logscale()
    img = R.get_image()
    extent = R.get_extent()
    for i, j in zip(range(4), [x0,x0,y0,y0]):
        extent[i] += j
    return img, extent

我正在使用以下代码行创建直方图:

fig = plt.figure(figsize=(15,15))
ax = fig.add_subplot(111)
img, extent = sphviewer_plot(df["x"].values, df["y"].values, 16, xsize=300, ysize=300)
img = np.flipud(img)
ax.imshow(img, extent=extent, origin='lower', cmap=mycmap)
ax.set_xlim(0,1080)
ax.set_ylim(0,1920)
plt.show()

df是Pandas DataFrame。这很好用,但现在我想使用三个值x,y和z创建2D热图,即对于每对x和y值我都有一个附加值z。我可以使用binned_statistic_2d()来创建这样的热图,如下所示:

heatmap, xedges, yedges, binnumber = stats.binned_statistic_2d(x, y, values=z, statistic='mean', bins=1000, range=[[0, 1080], [0, 1920]])
heatmap[np.isnan(heatmap)] = 0
heatmap = gaussian_filter(heatmap, sigma=s)

是否可以使sphviewer_plot()也支持3个值x和y和z?而且,是否还可以像上面的binned_statistic_2d那样提供方法的范围?

0 个答案:

没有答案