如何在Racket的Graph库中为GraphViz配置顶点属性
Racket Graph库中GraphViz顶点属性的正确用法
你在使用Racket的Graph库生成GraphViz图时,遇到了顶点属性(比如样式)无法正确生效的问题。问题出在#:vertex-attributes参数与define-vertex-property生成的属性访问器的关联方式上,以下是正确的实现方式:
修正后的完整代码
#lang racket (require graph) ; 创建有向图 (define mygraph (directed-graph '((a b) (c d)))) ; 定义顶点属性style,初始值为空字符串 (define-vertex-property mygraph style #:init "") ; 给顶点b设置样式 (style-set! 'b "filled, bold") ; 正确传递顶点属性到graphviz函数 (define graphtext (graphviz mygraph #:vertex-attributes '((style style))))
关键说明
define-vertex-property会生成一个属性访问器过程(这里就是style),这个过程接受顶点作为参数,返回该顶点对应的属性值。#:vertex-attributes参数需要传入一个列表,列表中的每个元素是(属性名 属性访问器)的结构:- 第一个
style是GraphViz识别的属性名(符号类型); - 第二个
style是我们通过define-vertex-property生成的访问器过程,用来获取每个顶点的样式值。
- 第一个
多属性扩展示例
如果需要同时设置多个顶点属性(比如填充色和样式),可以这样写:
#lang racket (require graph) (define mygraph (directed-graph '((a b) (c d)))) (define-vertex-property mygraph style #:init "") (style-set! 'b "filled, bold") (define-vertex-property mygraph fillcolor #:init "white") (fillcolor-set! 'b "lightblue") (define graphtext (graphviz mygraph #:vertex-attributes '((style style) (fillcolor fillcolor))))
内容的提问来源于stack exchange,提问作者Albtzrly
相关产品推荐
相关产品推荐

