我用matplotlib绘制了这两个2000点的系列。从图片来看,似乎第一个2000点占用面积小于第二个2000点。但是,如果我想定量计算2000点的第一和第二连续区域的占用量,我该怎么办?
我非常感谢任何帮助,建议或意见。
非常感谢。
答案 0 :(得分:7)
此问题与matplotlib
无关,还需要定义"占用区域",这可能会因您拥有的数据类型而异。如果你想要一种非严格的近似,这是一种方法:
首先,一些测试数据:
import matplotlib
import matplotlib.pyplot as plt
import numpy
x = numpy.random.normal(size=10000)
y = numpy.random.normal(size=10000)
fig = plt.figure()
s = fig.add_subplot(1, 1, 1, aspect=1)
s.set_xlim(-4, 4)
s.set_ylim(-4, 4)
s.scatter(x, y)
fig.savefig('t1.png')
计算2D直方图以估计点的密度。 注意:您需要为数据调整容器数量和范围。
hist, xedges, yedges = numpy.histogram2d(x, y, bins=20, range=[[-4, 4], [-4, 4]])
fig = plt.figure()
s = fig.add_subplot(1, 1, 1)
s.set_xlim(-4, 4)
s.set_ylim(-4, 4)
s.imshow(
hist, interpolation='nearest',
extent=[xedges[0], xedges[-1], yedges[0], yedges[-1]],
cmap=matplotlib.cm.viridis)
fig.savefig('t2.png')
最后,找到计数数大于某个预定义值的位置。 注意:您也必须调整此阈值,以便在"占用"之间取得理想的区别。和"非占用"方面:
over_threshold = hist > 10
fig = plt.figure()
s = fig.add_subplot(1, 1, 1)
s.set_xlim(-4, 4)
s.set_ylim(-4, 4)
s.imshow(
over_threshold, interpolation='nearest',
extent=[xedges[0], xedges[-1], yedges[0], yedges[-1]],
cmap=matplotlib.cm.viridis)
fig.savefig('t3.png')
area = over_threshold.sum() * (xedges[1] - xedges[0]) * (yedges[1] - yedges[0])
print(area)
当然,所有绘图都纯粹是说明性的,并不是算法必不可少的。