我有一个带有绝对x和y坐标的点列表:
points :: [(1,1), (2,2), (3,3), (-105, -42.42)]
一个边缘列表作为点元组:
edges :: [((1,1), (2,2)), ((1,1),(-105, -42.42)), ((3,3), (-105, -42.42))]
我现在想要使用diagrams
包来绘制它,使用圆圈表示节点,使用边线表示线条。我找到了应该提供此功能的类型Located
。另一方面,有atPoints
函数,但它们似乎没有达到相同的效果(atPoints
只移动本地原点)。
实现这一目标的实际方法是什么?如何使用Located
类型?
答案 0 :(得分:2)
您可以使用moveTo
,将某些对象移动到绝对指定的位置。要在绝对定义的顶点之间绘制边,可以使用fromVertices
。请注意,两者都不接受元组作为参数,但points - 但它很容易to convert to these。
> :m +Diagrams.Prelude Graphics.Dynamic.Plot.R2
> plotWindow $ (shapePlot <$> [circle 1 & moveTo (p2 p) | p<-points]
++ [fromVertices [p2 p, p2 q] | (p,q)<-edges])
++ [dynamicAxes]
要将这些元素组合到单个图表中,您只需使用monoid实例,即mconcat
列表。
plotWindow [shapePlot . mconcat $ [circle 1 & fcA transparent & moveTo (p2 p) | p<-points] ++ [fromVertices [p2 p, p2 q] | (p,q)<-edges]]