2014-03-24 176 views
1

考慮到輸出作爲繪製嵌套矢量

[[[-0.6925523827697917 -0.4095089425269985] 
    [-0.03856010899727634 0.8427233420960013] 
    [-2.609986195686694E-13 -1.680032093051418E-12]] 
[[0.7203362514229046 -0.3494564274369062]]] 

在單括號之間,即[-0.6925523827697917 -0.4095089425269985]嵌套向量這樣的功能,是在笛卡爾座標中要繪製的數字。

此外,還有另一個托架內的載體,即

[[0.7203362514229046 -0.3494564274369062]]

其表示一個羣集。

我要求繪製點,這是上面的載體,並繪製一個集羣內的連接點的線。因此,羣集[[-0.6925523827697917 -0.4095089425269985] [-0.03856010899727634 0.8427233420960013] [-2.609986195686694E-13 -1.680032093051418E-12]]內的點將被連接。

我的第一個想法是使用Incanter的xy圖。我不確定的部分是如何從索引結構(例如矢量)轉到圖上的一個點。另外,我不確定如何繪製連接聚集點的線。上面的示例應該在第一個羣集中的三個點中有一行(最好是平滑的),並且由於羣集中只有一個點,因此不會穿過最後一個羣集。

回答

1

我不知道你想要什麼,但據我得到了你,這件事情是這樣的:

(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

我使用:cubic-hermiteinterpolation使線順利,並且我正在使用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

更新:

讓我們仔細看看我在這裏做。

首先,我用解構提取數據點和聚類座標(我假設你總是有下列數據點的單一集羣):

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

然後我打破嵌套向量的[x y]雙成兩個向量(每個尺寸):

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

然後我創建一個劇情對象和使用數據點繪製一條線就可以了:

(-> (xy-plot 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) 

我在這裏使用function-plot,因爲interp對象是函數。

+0

如果我想在沒有插值的情況下進行繪製,需要從第一個函數中刪除什麼?我嘗試從'function-plot'中刪除'interp'和interp這行,但是我把太多的參數傳給了函數(2)。 – sunspots

+0

看到我的第二個例子沒有內插的情節。 –

+0

使用後者my-plot,我將如何修改它以在同一圖表中繪製原始點和集羣? @LeonidBeschastny – sunspots