2016-07-07 25 views

答えて

3

最大の閉じた輪郭を見つけることは次のように行うことができます。ただし、これは「最大」とは最大のポイントツーポイント距離を意味することに注意してください。

他のサイズのメトリックも簡単に置換できます。

extend3d=Trueバージョンを使用している場合は、作成したPoly3DCollectionを少し操作する必要があります。

from mpl_toolkits.mplot3d import axes3d, art3d 
import matplotlib.pyplot as plt 
from matplotlib import cm 
from scipy.spatial import distance_matrix 
import numpy as np  

fig = plt.figure() 
ax = fig.gca(projection='3d') 
X, Y, Z = axes3d.get_test_data(0.05) 
cset = ax.contour(X, Y, Z, cmap=cm.coolwarm) 
ax.clabel(cset, fontsize=9, inline=1) 

maxsize = 0 
# Iterate over all the contour segments and find the largest 
for i, segs in enumerate(cset.allsegs): 
    for j, seg in enumerate(segs): 
     # First make sure it's closed 
     if (seg[0]-seg[-1]).any(): 
      continue 
     # Now get it's size 
     size = distance_matrix(seg, seg).max() 
     if size > maxsize: 
      maxsize = size 
      maxseg = (i, j) 

# Now highlight the "biggest" closed contour 
cset.collections[maxseg[0]].set_color('y') 
cset.collections[maxseg[0]].set_lw(5) 
pts2d = cset.allsegs[maxseg[0]][maxseg[1]] 
z = cset.levels[maxseg[0]] 
coords = np.c_[ pts2d, z*np.ones(pts2d.shape[0]) ] 
print(coords) 

plt.show() 

これは、その結果:あなたは閉じた輪郭がどのように大規模な定義はどうすればよい

enter image description here

+0

おかげで@jmetz。この輪郭にデータポイントを取得する機会はありますか? x、y、zの座標を意味しますか? – user6457831

+1

np - データポイントは 'seg'変数に含まれていて(2dです)、z値は' cset.levels'の対応する要素にあります。 – jmetz

+1

変数 'coords'に' x、y、z'として保存するようにコードを更新しました。 – jmetz

関連する問題