如何使用GraphViz和Racket

时间:2015-04-21 09:41:22

标签: racket graphviz

是否可以使用graphviz模块在球拍框架(GUI)中绘制图形? 如果可能的话,是否会有人展示如何使用的教程? 感谢' S

3 个答案:

答案 0 :(得分:2)

以下是我要做的事情:

  • 从图表中生成点文件(Graphviz格式)
  • 使用system在生成png文件的文件上运行grapviz
  • 在球拍框架中显示png

有关实际代码,请参阅:https://github.com/wangkuiyi/graphviz-server

请注意,Stephen Chang的图表库支持生成点文件:http://pkg-build.racket-lang.org/doc/graph/index.html#%28part._.Graphviz%29

更新

为了制作图形编辑器,您可以将图形数据保存在文件中,然后让Graphviz以点格式输出布局信息:http://www.graphviz.org/doc/info/output.html#d:xdot1.4 解析输出文件,然后在屏幕上重绘图形。

答案 1 :(得分:0)

这是一个例子。您必须安装点程序。

#lang racket
(require graph)
(require racket/gui/base)

(define dot-command "/usr/local/bin/dot -Tpng ~a >~a")

;; Given a graph, use dot to create a png and return the path to the png
(define (make-graphviz-png g)
  (let ([dot-string (graphviz g #:colors (coloring/brelaz g))]
        [dot-file (make-temporary-file "example~a.dot")]
        [png-file (make-temporary-file "example~a.png")])

    (display-to-file dot-string dot-file #:exists 'replace)
    (system (format dot-command dot-file png-file))
    png-file))

;; The graph
(define test-graph (unweighted-graph/directed '((hello world))))

;; Generate the png from the graph
(define bitmap (read-bitmap (make-graphviz-png test-graph)))

;; Display in a frame -- see https://stackoverflow.com/questions/5355251/bitmap-in-dr-racket
(define f (new frame% [label "Your Graph"]))
(new message% [parent f] [label bitmap])
(send f show #t)

答案 2 :(得分:0)

您可以使用graphviz软件包。如果要直接使用点语,则可以使用点->点选功能。另外,您可以使用digraph-> pict,通过允许使用Racket picts作为节点形状来使点更加强大。