2014-03-24 6 views
1

[-0.6925523827697917 -0.4095089425269985]플로팅 중첩 벡터

단일 브래킷 사이
[[[-0.6925523827697917 -0.4095089425269985] 
    [-0.03856010899727634 0.8427233420960013] 
    [-2.609986195686694E-13 -1.680032093051418E-12]] 
[[0.7203362514229046 -0.3494564274369062]]] 

, 같은 중첩 벡터를 출력하는 기능을 고려 직교 좌표에 플롯 할 수는있다.

은 추가적으로, 즉 클러스터를 나타내고

[[0.7203362514229046 -0.3494564274369062]]

다른 브래킷 내의 벡터있다.

나는 위의 벡터 인 포인트를 그려보고 클러스터 내에서 포인트를 연결하는 선을 그립니다. 따라서 클러스터 내의 점 [[-0.6925523827697917 -0.4095089425269985] [-0.03856010899727634 0.8427233420960013] [-2.609986195686694E-13 -1.680032093051418E-12]]이 연결됩니다.

내 첫 번째 생각은 Incanter의 xy-plot을 사용하는 것입니다. 내가 확신 할 수없는 부분은 벡터와 같은 인덱싱 된 구조에서 플롯의 한 지점으로 이동하는 방법입니다. 또한 클러스터 된 지점을 연결하는 선을 그리는 방법을 모르겠습니다. 위의 예는 첫 번째 클러스터의 세 지점을 통해 한 줄 (바람직하게는 매끄럽게)을 가져야하며 클러스터 내에 한 지점 만 있기 때문에 마지막 클러스터를 통과하지 않아야합니다.

답변

1

나는 당신이 원하는 모르겠지만, 지금까지의 내가 당신을 가지고, 그것은이 같은 뭔가 : 나는 부드러운 라인을 만들기 위해 :cubic-hermite 스플라인 interpolation

(use '(incanter core charts interpolation)) 

(defn my-plot [[data [[cx cy]]]] 
    (let [x  (map first data) 
     y  (map second data) 
     lbound (apply min x) 
     rbound (apply max x) 
     interp (interpolate data :cubic-hermite)] 
    (-> (function-plot interp lbound rbound) 
     (add-points x y) 
     (add-points [cx] [cy]) 
     view))) 

cubic spline interpolation

사용하고 있습니다 , add-points function을 사용하여 데이터 포인트를 plot에 추가합니다.

more interpolation examples here을 찾을 수 있습니다.

그러나 세 점은 좋은 보간을위한 충분하지 않습니다, 그래서 당신은 대신 선형 보간법을 사용하는 것이 좋습니다 :

(defn my-plot [[data [[cx cy]]]] 
    (let [x (map first data) 
     y (map second data)] 
    (-> (xy-plot x y) 
     (add-points x y) 
     (add-points [cx] [cy]) 
     view))) 

linear interpolation

업데이트 :

는 이제 좀 더 자세히 살펴 보자 내가 내가 여기서하고있어.

첫째, 데이터 포인트 및 클러스터 좌표를 (난 당신이 항상 당신의 데이터 포인트 다음 단일 클러스터가 있으리라 믿고있어) 추출 destructuring을 사용하고 있습니다 : 그런 다음

(defn my-plot [[data [[cx cy]]]] 

내가 중첩 된 벡터를 깨는거야을

(let [x (map first data) 
     y (map second data)] 

그럼 난 플롯 객체를 생성하고 데이터 포인트를 사용하여 그 위에 선을 그리는 해요 : :

을 두 벡터에 [x y]쌍 (각 차원에 대해 하나)의

 (add-points x y) 

및 클러스터 (녹색 점) :

가 그럼 난 원래 데이터 포인트 (파란색 점) 추가 해요 마지막으로

 (add-points [cx] [cy]) 

을, 나는 결과 플롯을 표시 해요 :

 view))) 

첫 번째 예에서는 보간법을 사용하여 선을 더 부드럽게 만듭니다.

 lbound (apply min x) 
     rbound (apply max x) 
     interp (interpolate data :cubic-hermite)] 
    (-> (function-plot interp lbound rbound) 

interp 개체가 기능이기 때문에 여기에서 function-plot을 사용하고 있습니다.

+0

첫 번째 함수에서 제거해야 할 부분을 보간없이 플롯하려면? 나는'function-plot'에서'interp'와 interp를 제거하려고했지만 너무 많은 args를 함수에 넘겼습니다 (2). – sunspots

+0

보간이없는 플롯의 두 번째 예를 참조하십시오. –

+0

후자의 my-plot을 사용하면 원본 그래프와 클러스터를 동일한 그래프에 플롯하기 위해 어떻게 수정합니까? @LeonidBeschastny – sunspots