2016-03-02 61 views
3

我已經用matplotlib繪製了這兩個系列的2000點。從圖片看來,第一個2000分的佔用面積似乎比第二個2000分小。但是如果我想定量計算2000點的第一和第二連續點佔用了多少區域,我該怎麼辦?如何計算蟒蛇二維散點佔用區域

enter image description here enter image description here

我真的很感激任何幫助,建議或意見。

非常感謝。

+0

看看'scipy''ConvexHull',http://stackoverflow.com/questions/35664675/in-scipys-convexhull-what-does-area-measure – hpaulj

回答

6

此問題與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') 

enter image description here

計算二維直方圖來估算點的密度。 注意:垃圾箱數量和範圍是您必須針對您的數據進行調整的。

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') 

enter image description here

最後,找到地方計數的數量比一些預定義的值。 注:你必須得調整這個門檻,讓與「佔領」和「非佔領」地區所需的區別:

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) 

enter image description here

所有繪圖,當然,是純粹是說明性的,對算法來說不是必需的。

+0

非常感謝!這正是我想要的! –