我有一些x和y数据,我想用它们生成一个3D直方图,带有颜色梯度(bwr或其他)。
我写了一个脚本,绘制了有趣的值,在-2和2之间的x和y脓肿:
import numpy as np
import numpy.random
import matplotlib.pyplot as plt
# To generate some test data
x = np.random.randn(500)
y = np.random.randn(500)
XY = np.stack((x,y),axis=-1)
def selection(XY, limitXY=[[-2,+2],[-2,+2]]):
XY_select = []
for elt in XY:
if elt[0] > limitXY[0][0] and elt[0] < limitXY[0][1] and elt[1] > limitXY[1][0] and elt[1] < limitXY[1][1]:
XY_select.append(elt)
return np.array(XY_select)
XY_select = selection(XY, limitXY=[[-2,+2],[-2,+2]])
heatmap, xedges, yedges = np.histogram2d(XY_select[:,0], XY_select[:,1], bins = 7, range = [[-2,2],[-2,2]])
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
plt.figure("Histogram")
#plt.clf()
plt.imshow(heatmap.T, extent=extent, origin='lower')
plt.show()
并给予正确的结果:
现在,我想把它变成一个3D直方图。不幸的是,我没有成功地用bar3d
正确地绘制它,因为它默认采用x和y的长度作为横坐标。
我很确定有一种非常简单的方法可以用imshow在3D中绘制这个。就像一个未知的选择……
2条答案
按热度按时间vcudknz31#
我终于成功地做了那件事。我几乎可以肯定有一个更好的方法来做到这一点,但至少它的工作:
我使用这个example,但我修改了它,因为它引入了一个偏移量。结果是这样的:
ix0qys7i2#
您可以使用以下简单的方法生成相同的结果:
结果如下: