我尝试使用GraphViz package绘制嵌套群集的图表,但我无法理解如何使用NodeCluster
类型的构造函数:
N a
C c (NodeCluster c a)
我想到的图片是群集被排列在树中(代表嵌套)并由标签cl标记,但我不知道它是如何转化为上面的。
具体来说,我正在编写以下功能。这两条评论描述了我试图做的事情。
makeClusterParams :: (Show el) => (Node -> nl -> String) -> (Node -> nl -> (cl,Maybe cl)) -> Gr nl el -> GraphvizParams Node nl el cl nl
makeClusterParams f g graph = nonClusteredParams {
clusterBy = cb,
fmtNode = fn,
fmtEdge = fe
}
where
cb (xn,xl) =
case g xn xl of
(thisCluster, Just parentCluster) -> --put this node inside of thisCluster, and put thisCluster inside of parentCluster
(thisCluster, Nothing) -> --put this node in the top-level cluster.
fn (xn,xl) = [(Label . StrLabel. pack) (f xn xl)]
fe (xm,xn,l) = [(Label . StrLabel. pack) (show l)]
答案 0 :(得分:1)
此类型不代表树。相反,它似乎代表了从根到特定节点的路径。
您的方法似乎从根本上是错误的。如果g xn1 xl1
返回(thisCluster, Just parentCluster1)
,g xn2 xl2
返回(thisCluster, Just parentCluster2)
,该怎么办?您是否希望将thisCluster
放入两个不同的父母中?