使用SVG进行数据可视化

3
当回答最近的问题 Prolog Constraint Processing : Packing Squares 时,我想要可视化 Prolog + clpfd 给出的答案。
为此,我编写了一些不太规范的 Prolog 代码,使用了 Prolog 内置的 "谓词" format/2write/1,以发出适当的 ImageMagick 命令,如下所示:
drawBoxesWithIM_at_pix(Sizes,Positions,P) :-
    Colors = ["#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff"],
    write(' -strokewidth 2 -stroke white'),
    nth1(N,Positions,Xb+Yb),
    nth1(N,Sizes,    Wb*Hb),
    nth1(N,Colors,   Color),
    format(' -draw "fill ~sb0 roundrectangle ~d,~d ~d,~d ~d,~d"',
           [Color, Xb*P+3,Yb*P+3, (Xb+Wb)*P-3,(Yb+Hb)*P-3, P/2,P/2]),
    false.
drawBoxesWithIM_at_pix(_,_,_).

快速的hack效果不错,但是我感觉自己写的代码过于臃肿和有些混乱...我想找到一种更具声明性的替代方案来进行这样的2D可视化。我感觉SVG可能是一个不错的选择。
现在,SVG基于XML,多个Prolog系统提供了处理XML的库作为其标准库的一部分。
是否有适用于SVG的Prolog库?或者其他适合Prolog绑定的2D/(3D)数据可视化框架/工具?
你认为有哪些合理的方法呢? 提前感谢!

1
+1,对于CLP(FD)任务和搜索过程的良好可视化绝对值得关注。确保查看Neumerkel等人的Visualizing Solutions with Viewers以获取一些想法。 - mat
2个回答

2
您应该查看Helmut Simonis等人的工作,他们在Cosytec CHIP和欧洲DiSCiPL项目的背景下,在这个领域做了大量的工作。
一个更近期的开源分支是CP-Viz系统(论文,{ {link3:幻灯片}})。CP-Viz与免费的ECLiPSe CLP系统一起分发,据我所知,它也已经移植到了SICStus和基于Java的Choco。 CP-Viz使用XML跟踪,并可以生成和显示SVG输出:

CP-Viz Architecture


2

SWI-Prolog有一个用于与.dia接口的包,一个用于graphml文件的包,以及一个用于graphviz的包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接