Zho*_*gyu 4 python algorithm numpy matplotlib
我用matplotlib绘制了这两个2000点的系列.从图片来看,似乎第一个2000点占用面积小于第二个2000点.但是,如果我想定量计算2000点的第一和第二系列区域占用多少,我该怎么办?
我非常感谢任何帮助,建议或意见.
非常感谢.
此问题与此无关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')
Run Code Online (Sandbox Code Playgroud)
计算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')
Run Code Online (Sandbox Code Playgroud)
最后,找到计数数大于某个预定义值的位置.注意:您还必须调整此阈值,以获得"占用"和"非占用"区域之间的所需区别:
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)
Run Code Online (Sandbox Code Playgroud)
当然,所有绘图都纯粹是说明性的,并不是算法必不可少的.