我在散点图上有很多数据 - 最终结果将有数百万点。这对于散点图来说太多了 - 我想将其转换为2D直方图,并绘制等高线图,如此处所述https://micropore.wordpress.com/2011/10/01/2d-density-plot-or-2d-histogram/
这类似于我使用的代码,并且具有相同的问题
import numpy
import matplotlib.pyplot as pyplot
def convert_edges_to_centres(edges):
centres = numpy.empty(len(edges)-1)
for i in range(len(centres)):
centres[i] = (edges[i+1] - edges[i])/2 + edges[i]
return centres
x = numpy.random.normal(0,1,50000)
print numpy.amin(x),numpy.amax(x)
y = numpy.random.beta(2,5,50000)
print numpy.amin(y),numpy.amax(y)
H,xedges,yedges=numpy.histogram2d(x,y,bins=25)
xcentres,ycentres=convert_edges_to_centres(xedges),convert_edges_to_centres(yedges)
print numpy.shape(H)
print numpy.shape(xedges),numpy.shape(xcentres)
print numpy.shape(yedges),numpy.shape(ycentres)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
ax = pyplot.axes()
ax.scatter(x,y)
ax.contour(H,extent=extent)
pyplot.show()
但轮廓图被翻转 - 看起来它可能会沿着xy翻转:
我意识到这可能很容易解决,但我无法解决问题所在!
我把convert_edges_to_centres函数放入其中,因为我也尝试使用语法pyplot.contour(x,y,z)
进行绘图,但这不起作用
答案 0 :(得分:1)
请注意,直方图不遵循笛卡尔惯例,其中x值在横坐标上,y值在纵坐标轴上。相反,x沿阵列的第一维(垂直)进行直方图编制,y沿阵列的第二维(水平)进行直方图。
还有一个示例,其中H
在被绘制之前被转置H = H.T
。所以你可能想要绘制
ax.contour(H.T,extent=extent)