Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 绘制嵌套向量_Clojure_Plot_Incanter - Fatal编程技术网

Clojure 绘制嵌套向量

Clojure 绘制嵌套向量,clojure,plot,incanter,Clojure,Plot,Incanter,考虑一个输出嵌套向量的函数,例如 [[[-0.6925523827697917 -0.4095089425269985] [-0.03856010899727634 0.8427233420960013] [-2.609986195686694E-13 -1.680032093051418E-12]] [[0.7203362514229046 -0.3494564274369062]]] 在单括号之间,即[-0.6925523827697917-0.4095089425269985]

考虑一个输出嵌套向量的函数,例如

[[[-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]
将被连接


我的第一个想法是使用白炽灯的xy图。我不确定的部分是如何从索引结构(如向量)转到绘图上的某个点。此外,我不知道如何绘制连接聚集点的线。上面的示例应该有一条线(最好是平滑的)穿过第一个簇中的三个点,而没有线穿过最后一个簇,因为簇内只有一个点

我不确定你想要什么,但就我所知,是这样的:

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

我正在使用
:三次hermite
样条曲线使线条平滑,并且我正在使用它向曲线添加数据点

你会发现

但三个点对于良插值是不够的,所以你应该考虑使用线性插值代替:

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

更新: 让我们仔细看看我在这里做什么

首先,我使用解构来提取数据点和集群坐标(我假设在数据点之后总是有一个集群):

然后我将
[xy]
对的嵌套向量分解为两个向量(每个维度一个):

然后我创建一个plot对象,并使用数据点在其上绘制一条线:

(defn my-plot [[data [[cx cy]]]]
    (-> (xy-plot x y)
然后我添加原始数据点(蓝点):

和您的群集(绿点):

最后,我将显示结果图:

        view)))
在我的第一个示例中,我还使用插值使直线更平滑:

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

我在这里使用的是
function plot
,因为
interp
对象是一个函数。

如果我想在不使用插值的情况下绘图,需要从第一个函数中删除什么?我尝试从
函数图中删除行
interp
和interp
,但向函数(2)传递了太多的参数。请参阅第二个示例,了解无插值的绘图。使用后一个示例,我的绘图,如何修改它以在同一图形中绘制原始点和簇@LeonidBeschastnyAlso,我还没有弄清楚所有图表中出现的绿点。你能解释一下这个物体吗?绿点是你的簇
        (add-points [cx] [cy])
        view)))
        lbound  (apply min x)
        rbound  (apply max x)
        interp  (interpolate data :cubic-hermite)]
    (-> (function-plot interp lbound rbound)