我正在使用以下方法使用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
那样提供方法的范围?