2017-05-26 12 views
2

以下に示すようなデータセットがありますが、滑らかな曲線がいくつか切断されています。マーカーを描く代わりに、各曲線内のマーカーを線で結びたいと思っています。これを行う方法?注文されたデータセットから接続された線を抽出する

import numpy as np 
import matplotlib.pyplot as plt 
np.random.seed = 42 

x = np.linspace(0.1,0.9,50) 
y = x%1 
x += np.sin(2*x%1) 
y = y%0.2 


plt.scatter(x,y) 
plt.savefig("test.pdf") 

enter image description here

答えて

2

scatterの代わりにplotを使用してラインプロットを描くことができます。ここで問題はすべてのポイントが接続されることです。 のでplt.plot(x,y)を使用すると、アイデアは、彼らが不連続であるべき位置で行を分割することです。この
enter image description here

のようなものになるでしょう。 1つの座標がnanの値である点が表示されず、線が途切れてしまうことがあります。

分割する位置を見つける必要があります。この場合、それはむしろ単純です。xまたはyに関する微係数が負の場合です。

import numpy as np 
import matplotlib.pyplot as plt 

x = np.linspace(0.1,0.9,50) 
y = x%1 
x += np.sin(2*x%1) 
y = y%0.2 

def split(x,y): 
    ind = np.arange(0,len(x)-1)[np.diff(y) < 0]+1 
    return np.insert(y, ind, np.nan), np.insert(x, ind, np.nan) 

x,y = split(*split(x,y)) 


plt.scatter(x,y) 
plt.plot(x,y) 
plt.show() 

enter image description here

1

あなたはまず、知覚ラインを形成マーカーを検出する必要があります。

あなたのデータはちょうど一束のドットで、私はリスト内の連続するドットを賭けますのフォームラインです。構造は、コードではなく、プロットされた画像を見るときにあなたの脳によって検出されます。

おそらく、ツールはクラスタリングアルゴリズムです(いくつかの実装は、たとえばscikitに存在します)。

+1

あなたは、原理的には、データが乱れすることができると私はいくつかのクラスタリングアルゴリズムを必要とする、絶対的に正しいです。しかし、私が質問ImportanceOfBeingErnestの答えを述べた方法は正しいので、私はそれを受け入れた。 – physicsGuy

+0

@physicsGuy:私もその回答をアップしました! – 9000

関連する問題