2017-12-14 10 views
1

散布図はほぼ円のように見えます。外側の点を線で結合して、ほぼ円形のような形にしたいと思っています。 matplotlibでそれを行う方法はありますか?散布図の点への結合

答えて

3

あなたの散布図の外側のポイントを検索し、matplotlib.collectionsからPolyCollectionを使用して、これらの点を接続するためにscipy.spatialからConvexHullを使用することができます。

from matplotlib import pyplot as plt 
import numpy as np 
from scipy.spatial import ConvexHull 
from matplotlib.collections import PolyCollection 


fig, ax = plt.subplots() 

length = 1000 

#using some normally distributed data as example: 
x = np.random.normal(0, 1, length) 
y = np.random.normal(0, 1, length) 

points = np.concatenate([x,y]).reshape((2,length)).T 
hull = ConvexHull(points) 



ax.scatter(x,y) 

ax.add_collection(PolyCollection(
    [points[hull.vertices,:]], 
    edgecolors='r', 
    facecolors='w', 
    linewidths=2, 
    zorder=-1, 
    )) 



plt.show() 

結果は次のようになります。

result of the given code

編集

実際には、PolyCollectionをスキップし、船体の頂点を使用して単純な線図を作成することができます。あなただけの頂点のリスト(一つの要素長く、そのリストを作る)に最初の頂点を追加することにより、ライン円形をしなければならない:

circular_hull_verts = np.append(hull.vertices,hull.vertices[0]) 
ax.plot(
    x[circular_hull_verts], y[circular_hull_verts], 'r-', lw=2, zorder=-1, 
    ) 
+0

Woooooaaaaaahhh – DilithiumMatrix

+0

おかげで、それは魔法でした! – johndaniel