Graphviz 如何生成具有自定义形状的节点?

Graphviz 如何生成具有自定义形状的节点?,graphviz,Graphviz,是一个很好的例子,说明了如何使用graphviz生成复杂的图。 这里列出了点文件 digraph G { compound=true; ranksep=1.25; label="From Past to Future..."; node [shape=plaintext, fontsize=16]; bgcolor=white; edge [arrowsize=1, color=black]; /* Nodes */ subg

是一个很好的例子,说明了如何使用graphviz生成复杂的图。 这里列出了点文件

digraph G {
    compound=true;
    ranksep=1.25;
    label="From Past to Future...";

    node [shape=plaintext, fontsize=16];

    bgcolor=white;
    edge [arrowsize=1, color=black];

    /* Nodes */
    subgraph cluster_Computers {label="Computers"; labelloc="b"; Computers_icon};
    Computers_icon [label="", shape=box, style=invis, shapefile="Computers.png"];

    subgraph cluster_Semantic_Web {label="Semantic Web"; labelloc="b"; Semantic_Web_icon};
    Semantic_Web_icon [label="", shape=box, style=invis, shapefile="Semantic_Web.png"];

    subgraph cluster_Cryptography {label="Cryptography"; labelloc="b"; Cryptography_icon};
    Cryptography_icon [label="", shape=box, style=invis, shapefile="Cryptography.png"];

    subgraph cluster_Automata {label="Automata"; labelloc="b"; Automata_icon};
    Automata_icon [label="", shape=box, style=invis, shapefile="Automata.png"];

    subgraph cluster_AI {label="A.I."; labelloc="b"; AI_icon};
    AI_icon [label="", shape=box, style=invis, shapefile="AI.png"];

    subgraph cluster_Chaos {label="Chaos / Fractals"; labelloc="b"; Chaos_icon};
    Chaos_icon [label="", shape=box, style=invis, shapefile="Chaos.png"];

    subgraph cluster_XML {label="XML / RDF / URI"; labelloc="b"; XML_icon};
    XML_icon [label="", shape=box, style=invis, shapefile="XML.png"];

    subgraph cluster_Ontology {label="Ontology / Clustering"; labelloc="b"; Ontology_icon};
    Ontology_icon [label="", shape=box, style=invis, shapefile="Ontology.png"];

    subgraph cluster_Biology {label="Biology / Neurons"; labelloc="b"; Biology_icon};
    Biology_icon [label="", shape=box, style=invis, shapefile="Biology.png"];

    subgraph cluster_Agents {label="Agents / Security"; labelloc="b"; Agents_icon};
    Agents_icon [label="", shape=box, style=invis, shapefile="Agents.png"];

    subgraph cluster_Small_World {label="The Small World Project"; labelloc="b"; Small_World_icon};
    Small_World_icon [label="", shape=box, style=invis, shapefile="Small_World.png"];

    subgraph cluster_Social_Networks {label="Social Networks"; labelloc="b"; Social_Networks_icon};
    Social_Networks_icon [label="", shape=box, style=invis, shapefile="Social_Networks.png"];

    subgraph cluster_Search_Engines {label="Search Engines"; labelloc="b"; Search_Engines_icon};
    Search_Engines_icon [label="", shape=box, style=invis, shapefile="Search_Engines.png"];

    subgraph cluster_Turing {label="A. Turing"; labelloc="b"; Turing_icon};
    Turing_icon [label="", shape=box, style=invis, shapefile="Turing.png"];

    subgraph cluster_Rejewski {label="M. Rejewski"; labelloc="b"; Rejewski_icon};
    Rejewski_icon [label="", shape=box, style=invis, shapefile="Rejewski.png"];

    subgraph cluster_Dertouzos {label="M. Dertouzos"; labelloc="b"; Dertouzos_icon};
    Dertouzos_icon [label="", shape=box, style=invis, shapefile="Dertouzos.png"];

    subgraph cluster_Berners_Lee {label="T. Berners-Lee"; labelloc="b"; Berners_Lee_icon};
    Berners_Lee_icon [label="", shape=box, style=invis, shapefile="Berners_Lee.png"];

    /* Relationships */
    Computers_icon -> Semantic_Web_icon;
    Semantic_Web_icon -> Computers_icon;
    Cryptography_icon -> Semantic_Web_icon;
    Cryptography_icon -> Computers_icon;
    Automata_icon -> Computers_icon;
    AI_icon -> Automata_icon;
    Automata_icon -> AI_icon;
    Chaos_icon -> Computers_icon;
    Chaos_icon -> AI_icon;
    AI_icon -> Chaos_icon;
    Computers_icon -> Chaos_icon;
    XML_icon -> Semantic_Web_icon;
    XML_icon -> Computers_icon;
    Computers_icon -> XML_icon;
    Ontology_icon -> Semantic_Web_icon;
    Biology_icon -> AI_icon;
    Biology_icon -> Chaos_icon;
    Chaos_icon -> Biology_icon;
    Chaos_icon -> Semantic_Web_icon;
    Agents_icon -> Semantic_Web_icon;
    Semantic_Web_icon -> Agents_icon;
    Agents_icon -> AI_icon;
    AI_icon -> Agents_icon;
    Small_World_icon -> Chaos_icon;
    Small_World_icon -> Agents_icon;
    Small_World_icon -> Biology_icon;
    Biology_icon -> Small_World_icon;
    Social_Networks_icon -> Small_World_icon;
    Social_Networks_icon -> Biology_icon;
    Search_Engines_icon -> Semantic_Web_icon;
    Computers_icon -> Search_Engines_icon;
    Turing_icon -> Cryptography_icon;
    Turing_icon -> Computers_icon;
    Turing_icon -> Automata_icon;
    Rejewski_icon -> Turing_icon;
    Rejewski_icon -> Cryptography_icon;
    Dertouzos_icon -> Computers_icon;
    Dertouzos_icon -> Berners_Lee_icon;
    Berners_Lee_icon -> Semantic_Web_icon;


    { rank=same; Rejewski_icon; Turing_icon; Dertouzos_icon; Berners_Lee_icon };
    { rank=same; Biology_icon; AI_icon; Social_Networks_icon };

}
我从过去到未来运行
dot-Tpng-ofrom-pass-to-future.png。dot
带有警告

C:\dot>dot -Tpng -ofrom-past-to-future.png from-past-to-future.dot
Warning: AI_icon was already in a rankset, deleted from cluster G
Warning: Biology_icon was already in a rankset, deleted from cluster G
Warning: Social_Networks_icon was already in a rankset, deleted from cluster G
Warning: Turing_icon was already in a rankset, deleted from cluster G
Warning: Rejewski_icon was already in a rankset, deleted from cluster G
Warning: Dertouzos_icon was already in a rankset, deleted from cluster G
Warning: Berners_Lee_icon was already in a rankset, deleted from cluster G
我试图修改点文件,但无法获得与原始帖子相同的png图像。
如何处理它?

这里有一个经过修改的脚本,它适用于当前版本的graphviz。请注意,您需要将所有图像与脚本放在同一目录中

我所做的改变:

  • 清理了冗余属性声明(
    label=”“
    labelloc
    等)
  • 使用
    图像
    属性而不是旧的
    形状文件
  • 从节点中删除了
    shape=box
    style=invi
  • 添加了
    penwidth=0
    以去除集群边界
  • 将图形标签置于底部(应始终位于底部)
  • 注释掉了等级限制。
    相同的
    节点不能是不同子图的一部分
当然,这不会复制完全相同的图形。重新创建秩约束需要更多的创造力,主要是因为每个节点都打包到自己的集群中,以便为其添加标签。。。非常粗糙。您可以在不使用集群的情况下尝试相同的方法,但使用新属性

我添加了第二个版本,其中我取消了
rank=same
子图的注释,并将它们放在集群定义之前。Graphviz随后将创建一个输出,但这些节点没有任何标签

以下是脚本:

有向图G{
复合=真;
ranksep=1.25;
节点[形状=纯文本,字体大小=16,标签=”];
bgcolor=白色;
边缘[箭头大小=1,颜色=黑色];
图形[penwidth=0,labelloc=“b”];
/*节点*/
//{rank=same;Rejewski_图标;Turing_图标;Dertouzos_图标;Berners_Lee_图标};
//{rank=same;生物学图标;AI图标;社交网络图标};
子图群集计算机{label=“Computers”;计算机图标[image=“Computers.png”];};
子图簇_Semantic_Web{label=“Semantic Web”;Semantic_Web_图标[image=“Semantic_Web.png”];};
子图簇_Cryptography{label=“Cryptography”;Cryptography_图标[image=“Cryptography.png”];};
子图簇_自动机{label=“Automata”;自动机图标[image=“Automata.png”];};
子图簇AI{label=“A.I.”AI_图标[image=“AI.png”];};
子图簇_混沌{label=“混沌/分形”混沌图标[image=“Chaos.png”];};
子图cluster_XML{label=“XML/RDF/URI”;XML_图标[image=“XML.png”];};
子图集群_本体{label=“Ontology/Clustering”;本体_图标[image=“Ontology.png”];};
子图簇_Biology{label=“Biology/Neurons”;Biology_图标[image=“Biology.png”];};
子图集群_代理{label=“Agents/Security”;代理图标[image=“Agents.png”];};
子图簇_Small_World{label=“小世界项目”Small_World_图标[image=“Small_World.png”];};
子图簇社交网络{label=“Social Networks”;社交网络图标[image=“Social\u Networks.png”];};
子图集群搜索引擎{label=“Search Engines”;搜索引擎图标[image=“Search\u Engines.png”];};
子图簇图灵{label=“A.Turing”;图灵图标[image=“Turing.png”];};
子图簇_Rejewski{label=“M.Rejewski”;Rejewski_图标[image=“Rejewski.png”];};
子图簇{label=“M.Dertouzos”;Dertouzos_图标[image=“Dertouzos.png”];};
子图簇_Berners_Lee{label=“T.Berners Lee”;Berners_Lee_图标[image=“Berners_Lee.png”];};
/*关系*/
代理图标->{AI图标语义网络图标};
AI图标->{Agents\u icon Automata\u icon混沌\u icon};
自动机图标->{AI图标计算机图标};
Berners_Lee_图标->语义Web_图标;
生物图标->{AI图标混沌图标小世界图标};
混沌图标->{AI图标生物图标计算机图标语义图标网络图标};
计算机图标->混沌图标搜索引擎图标语义网络图标XML图标;
密码学图标->{Computers\u icon Semantic\u Web\u icon};
Dertouzos_icon->{Berners_Lee_icon Computers_icon};
本体图标->语义图标;
Rejewski_icon->{Cryptography_icon Turing_icon};
搜索引擎图标->语义网站图标;
语义网络图标->{Agents\u icon Computers\u icon};
小世界图标->{Agents\u icon Biology\u icon Chaos\u icon};
社会网络图标->{生物图标小世界图标};
图灵图标->{自动机图标计算机图标加密图标};
XML_图标->{Computers_icon Semantic_Web_icon};
fontsize=28;
label=“从过去到未来…”;
}
这就是它看起来的样子:

第二个变量,未注释
rank=same
子图:


命令“C:\dot>dot-Tpng-ofrom-pass-to-future.png from-to-future.dot”会打印7条警告,并且在键入CTRL+C之前无法退出。非常奇怪的是,代码没有这么少的节点退出。如果有许多节点,布局可能需要一些时间,但这不是您的问题。尝试不同版本的graphviz。也许可以把这两条排名线注释掉(看看是否有效果)。非常感谢。请注意,使用rank=same指定的7个节点没有标签。如何修复它?