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)